multiset은 STL 컨테이너로, 중복된 값을 허용하면서 자동으로 정렬된 상태를 유지하는 데이터 구조다.
이는 일반적인 set과 달리 동일한 값을 여러 번 저장할 수 있다.
multiset에 값을 삽입한다. 동일한 값도 삽입이 가능하며, 자동으로 정렬된다.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms;
ms.insert(10);
ms.insert(5);
ms.insert(10); // 중복 허용
for (int val : ms) {
std::cout << val << " "; // 출력: 5 10 10
}
return 0;
}
특정 값이나 반복자를 이용하여 원소를 삭제한다.
ms.erase(10); // 모든 10 삭제
auto it = ms.find(5); // 값 5를 가리키는 반복자
if (it != ms.end()) {
ms.erase(it); // 해당 반복자에 해당하는 값만 삭제
}
특정 값을 탐색하여 반복자를 반환한다. 찾는 값이 없는 경우 end() 반복자를 반환한다.
auto it = ms.find(10);
if (it != ms.end()) {
std::cout << "10 found in multiset" << std::endl;
}
특정 값이 몇 개 있는지 확인할 수 있다.
int count_10 = ms.count(10);
std::cout << "10의 개수: " << count_10 << std::endl;
특정 값의 범위를 나타내는 반복자 쌍을 반환한다.
auto range = ms.equal_range(10);
for (auto it = range.first; it != range.second; ++it) {
std::cout << *it << " "; // 10 출력
}
기본적으로 multiset은 오름차순으로 정렬되지만, 사용자 정의 정렬 기준을 사용할 수 있다. 예를 들어 내림차순으로 정렬하려면 작성한다.
#include <iostream>
#include <set>
struct Descending {
bool operator()(int a, int b) const {
return a > b; // 내림차순 정렬
}
};
int main() {
std::multiset<int, Descending> ms;
ms.insert(10);
ms.insert(5);
ms.insert(15);
for (int val : ms) {
std::cout << val << " "; // 출력: 15 10 5
}
return 0;
}