프로그래밍/나의 디버깅 노트
[ps][c++] the way to erase element by using reverse_iterator on set, multiset
miniOS
2021. 6. 2. 23:53
한글로 써도 영어가 너무 많이들어가길래 영어로 썼다.

c++11부터는 erase의 매개변수로 const_iterator이 들어간다.
정확히 뭔지는 모르겠으나.set.erase(set.begin());을 하면 잘 되는데set.erase(set.rbegin());을 하면 오류가 난다.
똑같은 iterator인데 왜 안되는지는 잘 모르겠으나 해결방법을 발견했다.
int main()
{
std::set<int> set;
set.insert(15);
std::cout << set.size() << " ";
auto ri = set.rbegin();
auto i1 = --ri.base();
auto i2 = --set.end();
assert(i1 == i2);
set.erase(i1);
std::cout << set.size() << std::endl;
}이런식으로 하면 된다고 하는데
나는 그냥 가볍게 아래와 같이 작성했다.
auto it=set.rbegin();
set.erase((--it.base()));