Make Unreal REAL.
article thumbnail

 

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
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그