- 멀티셋(multiset)은 연관 컨테이너에 포함되며, 기본적으로 set과 거의 동일하지만 키(key)의 중복을 허용한다는 차이점이 있습니다.
- multiset 컨테이너를 사용하기 위해서는 set과 동일하게 <set> 헤더를 포함해야 하고, 선언할 때는 컨테이너에 들어갈 원소의 타입을 명시해주어야 합니다. 사용자의 편의에 따라서 정렬 방식을 선언할 때 정할 수도 있습니다.
#include <set>
std::multiset<type> ms1;
std::multiset<type, > ms2;
<multiset의 멤버 함수>
-std::multiset<int> s; 와 int key; 로 선언되어 있다고 가정합니다-
1) 삽입과 삭제
ms.insert(key); |
-> multiset에 원소 key를 삽입합니다. 원소는 정렬 방식에 따라 자동적으로 정렬되어 저장되며, key가 중복되어도 순차적으로 저장됩니다.
ms.erase(key); |
-> multiset에 원소 key가 존재하면 삭제합니다. 만약 key가 여러 개 있을 경우, 모두 삭제합니다.
ms.clear(); |
-> multiset의 모든 원소를 제거합니다.
2) 원소 참조
ms.begin(); |
ms.end(); |
ms.rbegin(); |
ms.rend(); |
-> ms.begin()은 multiset의 첫 번째 원소의 반복자를 리턴하고, ms.end()는 multiset의 마지막 원소의 다음을 가리키는 반복자를 리턴합니다.
-> ms.rbegin()과 ms.rend()는 위의 begin()과 end()랑 반대로(reverse) 동작합니다. 이 함수들은 역반복자(reverse_iterator)를 반환합니다.
ms.find(key); |
-> 만약 key가 multiset에 존재할 경우 key의 반복자를 리턴하고, 그렇지 않은 경우 ms.end()를 리턴합니다. 만약 key가 여러 개인 경우 key의 첫 번째 반복자를 리턴합니다.
ms.lower_bound(key); |
ms.upper_bound(key); |
-> lower_bound는 key의 첫 번째 반복자를, upper_bound는 key의 마지막 반복자를 리턴합니다.
-> 예를 들어, ms = {10, 30(1), 30(2), 30(3), 50} 인 경우, lower_bound(30)은 30(1) 위치의 반복자를, upper_bound(30)은 30(3) 위치의 반복자를 리턴합니다.
ms.key_comp(); |
-> multiset의 기준이 되는 정렬 방식을 리턴합니다. 지금과 같은 경우에는 less<int> 를 리턴합니다.
3) 크기 관련
ms.size(); |
-> multiset의 크기를 리턴합니다.
ms.empty(); |
-> multiset이 비어있는지 확인합니다. 비어있으면 1, 그렇지 않으면 0을 리턴합니다.
ms.count(key); |
-> multiset에서 key와 같은 원소의 개수를 리턴합니다.
-> set의 경우 count 함수는 0, 1 두 개의 값만 나올 수 있지만, multiset은 key의 중복을 허용하므로 좀더 유동적인 활용이 가능합니다.
'프로그래밍 언어 > C++ STL' 카테고리의 다른 글
C++ STL priority_queue (1) | 2023.03.27 |
---|---|
C++ STL list (1) | 2023.03.23 |
C++ STL queue (0) | 2023.02.21 |
C++ STL stack (0) | 2023.01.24 |
C++ STL map (0) | 2023.01.04 |
댓글