erase() 함수는 보통 하나의 원소만 삭제해서 multiset에서도 그런 줄 알았는데 아니었다.
multiset, multimap에서 erase() 함수는 해당 키를 갖는 원소를 모두 삭제한다.
#include <iostream>
#include <set>
#include <unordered_map>
using namespace std;
void main()
{
multiset<int> mset{1, 4, 2, 1, 5, 3};
unordered_multimap<int, int> ummap{{1, 0}, {4, 0}, {2, 0}, {1, 0}, {5, 0}, {3, 0}};
mset.erase(1);
ummap.erase(1);
for (int e : mset) cout << e << " "; cout << endl;
for (auto pr : ummap) cout << pr.first << " "; cout << endl;
}
출력
2 3 4 5
3 5 2 4
하나의 원소만 삭제하기 위해서는 아래와 같은 방법을 사용해야 한다.
- unordered 컨테이너는 이진 검색으로 값을 찾을 수 없기 때문에 lower_bound() 함수를 제공하지 않는다.
#include <iostream>
#include <set>
#include <unordered_map>
using namespace std;
void main()
{
multiset<int> mset{1, 4, 2, 1, 5, 3};
unordered_multimap<int, int> ummap{{1, 0}, {4, 0}, {2, 0}, {1, 0}, {5, 0}, {3, 0}};
mset.erase(mset.lower_bound(1));
ummap.erase(ummap.find(1));
for (int e : mset) cout << e << " "; cout << endl;
for (auto pr : ummap) cout << pr.first << " "; cout << endl;
}
출력
1 2 3 4 5
3 5 2 4 1
'자료구조 & 알고리즘 > 기타' 카테고리의 다른 글
정규 표현식으로 문자열 교체 (0) | 2023.02.21 |
---|---|
lower_bound, upper_bound (0) | 2023.02.19 |
vector에서 중복 원소 제거 (0) | 2023.02.07 |
유클리드 호제법(Euclidean algorithm) (0) | 2023.02.04 |
std::count 잘 사용하기 (0) | 2023.01.27 |