multiset
set이 중복되지 않는 원소를 저장한다면 multiset은 중복 원소를 저장할 수 있다.
기본적인 내장 함수는 Set을 참고해도 좋다.
중복 원소를 저장할 수 있는 것에 결과값에 차이가 있을 수 있다.
- 헤더파일: #include <set>
- multiset 원소는 자동으로 정렬된다.
- 기본적으로 오름차순(less) 정렬이고 greater 조건자로 내림차순 정렬 가능
관련 함수
- insert(value): value 원소 추가
- begin(): 첫번째 iterator 반환
- end(): 마지막 iterator 반환
- erase(value): value 원소 제거 (중복 원소 모두 포함)
- clear(): 모든 원소 제거
- find(value): value 에 해당하는 iterator 반환
없는 경우, end()와 같은 반복자 반환
- count(value): value 원소 개수 반환
set과 달리 중복값이 허용되기에 2이상의 수가 return 될 수 있다.
- empty(): 비어있으면 true 아니면 false 반환
- size(): 존재하는 원소 개수
#include <iostream>
#include <set>
using namespace std;
int main() {
// multiset<int> mset; // 오름차순
multiset<int, greater<int>> ms; // 내림차순
ms.insert(3);
ms.insert(5); ms.insert(5);
ms.insert(4);
ms.insert(1);
ms.insert(2); ms.insert(2);
ms.insert(4); ms.insert(4);
for (auto i : ms)
{
cout << i << " ";
}
cout << endl;
ms.erase(2); // 중복포함해서 원소 2 모두 제거
for (auto iter = ms.begin(); iter != ms.end(); iter++)
{
cout << *iter << " ";
}
cout << endl;
// 중복 포함해서 원소 4의 개수 반환
cout << "원소 4의 개수 : " << ms.count(4) << endl;
// find() 결과 존재하지 않으면 ms.end() 반환
if (ms.find(10) == ms.end())
{
cout << "원소 10 is 존재 X\n";
}
else
{
cout << "원소 10 is 존재 O\n";
}
}
- lower_bound(k): k가 시작하는 구간의 반복자
- upper_bound(k): k가 끝나는 구간의 반복자
- equal_range(k): lower_bound(k) 와 upper_bound(k)의 쌍(pair) 값을 반환
[ lower_bound(). upper_bound() ) 범위로 열린 + 닫힌 구간 주의
#include <iostream>
#include <set>
using namespace std;
int main() {
// multiset<int> mset; // 오름차순
multiset<int, greater<int>> ms; // 내림차순
ms.insert(3);
ms.insert(5); ms.insert(5);
ms.insert(4);
ms.insert(1);
ms.insert(2); ms.insert(2);
ms.insert(4); ms.insert(4);
for (auto i : ms)
{
cout << i << " ";
}
cout << endl;
int tg = 4;
auto er = ms.equal_range(tg); // equal_range = pair< lower_bound(), upper_bound()>
cout << *ms.lower_bound(tg) << "\n"; // "4" 시작 반복자에 위치한 원소(이상)
cout << *ms.upper_bound(tg) << "\n"; // "4" 종료 반복자에 위치한 원소(미만)
// 원소 tg(=4) 출력
for (auto it = er.first; it != er.second; it++) {
cout << *it << " ";
}
cout << endl;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] [STL] List (0) | 2021.07.30 |
---|---|
[C++] [STL] Deque (0) | 2021.07.30 |
[C++] [STL] Set (0) | 2021.07.29 |
[STL] unique 함수 활용한 vector 중복 원소 제거 (0) | 2021.07.29 |
[C++] [STL] Vector 사용 방법 (0) | 2021.07.26 |
댓글