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

C++ STL multiset

by Celestial_ 2023. 4. 2.
반응형
  • 멀티셋(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

댓글