할머니의 콤퓨타 도전기

(STL) map 요소 삭제 주의 본문

Program Language/C++

(STL) map 요소 삭제 주의

ji.o.n.e 2021. 3. 9. 23:18

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