본문 바로가기
프로그래밍 언어/C++

[C++] [STL] multiset

by 까망 하르방 2021. 7. 30.
반응형

multiset

set이 중복되지 않는 원소를 저장한다면 multiset은 중복 원소를 저장할 수 있다.

기본적인 내장 함수는 Set을 참고해도 좋다.

 

[C++] [STL] Set

Set - 중복 없는 원소만을 가지는 집합 같은 것이다. (중복 허용 X) - 헤더파일: #include - set에 들어가는 원소는 자동으로 정렬된다. - set은 기본적으로 오름차순(less) 정렬이고 greater 조건자로 내림

zoosso.tistory.com

중복 원소를 저장할 수 있는 것에 결과값에 차이가 있을 수 있다.

- 헤더파일: #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

댓글