c/c++
STL iterator로 erase()사용시 주의해야할 점
Нуеоп
2012. 8. 27. 19:30
for( map<string,vector<int> >::iterator iter = MyMap.begin(); iter != MyMap.end(); ) {
if( iter->second.size() < 1 ) {
MyMap.erase(iter++);
}
else{
iter++;
}
}
위처럼 erase(iter++);하지 않으면, iter을 미리 다른곳에 보관한다음, 삭제후 복원해야 한다.
혹은
for( map<string,vector<int> >::iterator iter = MyMap.begin(); iter != MyMap.end(); ) {
if( iter->second.size() < 1 ) {
iter = MyMap.erase(iter);
}
else{
iter++;
}
}