할머니의 콤퓨타 도전기
(STL) map 요소 삭제 주의 본문
map 컨테이너의 반복자가 참조하고 있는 원소가 삭제되는 경우 위험
- m.erase(it) 이후 m의 반복자인 it가 무효화됨.
- erase에 의해 반복자가 이미 지워진 요소를 가르킴. 따라서 ++연산자는 정의되지 않은 결과 불러옴
map<string, int> m;
...
for(auto it = m.begin(); it!=m.end(); it++){
if(it->second == value)
m.erase(it); // runtime error
}
- 따라서 아래와 같이 erase 호출 전 미리 반복자를 복사하고 erase 호출
map<string, int> m;
...
for(auto it = m.begin(); it!=m.end();){
if(it->second == value)
m.erase(it++);
else
++it;
}
'Program Language > C++' 카테고리의 다른 글
(C++) 벡터 중복원소 제거 (0) | 2021.01.30 |
---|---|
(C++) tolower, toupper 대소문자 변환 (0) | 2021.01.30 |
priority queue 비교 연산자 구현 (0) | 2021.01.30 |
(STL) map vs unordered_map (0) | 2021.01.06 |
(STL) deque 사용법 (0) | 2020.08.03 |
Comments