728x90
728x90
multiset(중복 집합)

특징
- 연관 컨테이너(Associative Container) 중 하나이다.
- 연관 컨테이너에는 set, multiset, map, multimap 이 있다.
- set과 비슷하지만, 중복된 키(Key)를 넣을 수 있다는 차이점이 있다.
- 삽입된 요소들은 기본적으로 오름차순(less)으로 정렬된다.

헤더 파일
- multiset을 사용하려면 다음의 헤더 파일을 불러와야 한다.
#include <set>
멤버 함수

사용 방법
- set과 사용 방법이 비슷하다.
- 바로가기 : https://dev-astra.tistory.com/247
[C++] set(집합)
set(집합) 특징 연관 컨테이너(Associative Container) 중 하나이다. 연관 컨테이너에는 set, multiset, map, multimap 이 있다. 특정 순서에 따라 고유한 요소를 저장하는 컨테이너이다. 기본적으로 요소들은 오
dev-astra.tistory.com
객체 생성
- 다음과 같이 객체를 생성한다.
multiset<[data_type]> [name]
#include <iostream> #include <set> using namespace std; multiset<int> ms { 1, 1, 3, 10, 10, 3 }; int main() { for (const auto& num : ms) { cout << num << " "; } cout << endl; return 0; }
1 1 3 3 10 10
요소 삽입
- 다음과 같이 insert() 함수를 사용하여 요소를 삽입할 수 있다.
- set과 다르게 중복되는 요소를 삽입할 수 있다.
ms.insert(1);
키의 개수 알아내기
- count([key]) 함수를 사용하여 키의 개수를 확인할 수 있다.
cout << ms.count(1) << endl; // 키가 1인 요소의 개수 출력
내림차순으로 정렬시키기
- 요소를 삽입할 때 기본적으로 오름차순(less)으로 정렬되지만, 다음과 같이 내림 차순(greater)으로 정렬시키도록 할 수 있다.
- map에서도 이 방법을 사용할 수 있다.
#include <iostream> #include <set> #include <functional> // less, greater using namespace std; struct myGreater { bool operator()(const int &lhs, const int &rhs) const { return lhs > rhs; // 내림 차순으로 정렬 } }; struct myLess { bool operator()(const int &lhs, const int &rhs) const { return lhs < rhs; // 오름 차순으로 정렬 } }; int main() { // 오름 차순으로 정렬 (기본값) set<int, less<int>> s1 { 3, 10, -1 }; // set<int, myLesser> s1{3, 10, -1}; for (const auto& num : s1) { cout << num << " "; } cout << endl; // 내림 차순으로 정렬 set<int, greater<int>> s2 { 3, 10, -1 }; // set<int, myGreater> s2{3, 10, -1}; for (const auto& num : s2) { cout << num << " "; } cout << endl; return 0; }
-1 3 10 10 3 -1
사용 예
#include <iostream> #include <set> using namespace std; multiset<int> ms; int main() { // 요소 삽입 ms.insert(12); ms.insert(10); ms.insert(2); ms.insert(10); ms.insert(90); ms.insert(85); ms.insert(45); cout << "multiset" << '\n'; for (auto i : ms) { cout << i << " "; } cout << endl; // 요소 찾기 auto search1 = ms.find(10); auto search2 = ms.find(90); // 요소 지우기 : [10, 90) ms.erase(search1, search2); cout << "multiset after erasing" << '\n'; for (auto i : ms) { cout << i << " "; } cout << endl; ms.erase(ms.begin()); // 첫 번째 요소 제거 for (auto i : ms) { cout << i << '\n'; } return 0; }
multiset 2 10 10 12 45 85 90 multiset after erasing 2 90 90
728x90
728x90
'Programming > C++' 카테고리의 다른 글
[C++] 2차원 배열을 특정 값으로 초기화 하는 방법 (0) | 2023.01.26 |
---|---|
[C++] 2차원 배열 동적 할당 방법 (new 연산자) (0) | 2022.12.08 |
[C++] set(집합) (0) | 2022.11.08 |
[C++] multimap(멀티 맵) (0) | 2022.11.08 |
[C++] unordered_map (0) | 2022.11.08 |
[C++] map(맵) (0) | 2022.11.08 |
[C++] pair(페어)와 tuple(튜플) (0) | 2022.11.03 |
[C++] lower_bound(), upper_bound() ; 이진 탐색(Binary Search) (0) | 2022.11.01 |