Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL map::erase() 함수 완벽 가이드 – 문법, 매개변수, 예제 총정리

이 글에서는 C++ STL에서 map::erase() 함수의 동작 방식, 문법 그리고 실제 활용 예제를 자세히 살펴보겠습니다.

C++ STL에서 맵(Map)이란?

맵(map)은 연관 컨테이너(associative container)로, 키(key)와 값(value)이 한 쌍을 이루는 요소들을 특정 순서에 따라 저장할 수 있도록 도와줍니다. 맵 컨테이너 내부의 데이터는 항상 연관된 키를 기준으로 자동 정렬되며, 각 값은 고유한 키를 통해서만 접근할 수 있습니다.

map::erase()란 무엇인가?

map::erase()<map> 헤더 파일에 포함된 함수로, 맵 컨테이너에서 특정 요소 하나 또는 일정 범위의 요소들을 제거하는 데 사용됩니다. 키 값을 이용해 해당 요소를 직접 삭제할 수도 있습니다.

이 함수는 컨테이너에서 제거된 요소의 개수만큼 맵 컨테이너의 크기를 줄입니다.

문법(Syntax)

map_name.erase(iterator pos);
map_name.erase(key_type& k);
map_name.erase(iterator start, iterator end);

매개변수(Parameters)

이 함수는 아래와 같은 매개변수를 받습니다.

  • pos − 제거하려는 요소의 위치를 가리키는 반복자(iterator)입니다.
  • k − 맵 컨테이너에서 제거하고자 하는 키 값입니다.
  • start, end − 삭제하고 싶은 범위의 시작 위치와 끝 위치를 지정하는 반복자입니다.

반환값(Return Value)

키 기반 erase(k)의 경우 삭제가 성공하면 1, 실패하면 0을 반환합니다(즉, 제거된 요소의 개수를 반환). 반복자 기반 erase(pos)는 C++11부터 제거된 요소의 다음 위치를 가리키는 반복자를 반환합니다.

예제

입력

map<char, int> newmap;
newmap['a'] = 1;
newmap['b'] = 2;
newmap.erase('b');

출력

a

예제 1: 키를 이용한 요소 삭제

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.emplace(3, 50);
    TP_Map.emplace(2, 30);
    TP_Map.emplace(1, 10);
    TP_Map.emplace(4, 70);
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
       cout << i->first << "\t" << i->second << endl;
    }
    //맵의 값 삭제하기
    TP_Map.erase(1);
    TP_Map.erase(2);
    cout<<"\n\nAfter erasing the element: \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
       cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70
After erasing the element:
MAP_KEY    MAP_ELEMENT
3          50
4          70

위 예제에서는 키 값 1과 2를 인자로 전달해 해당 요소들을 한 번에 삭제했습니다. 실행 결과에서 볼 수 있듯이, 키가 1과 2인 요소가 맵에서 제거된 것을 확인할 수 있습니다.

예제 2: 반복자를 이용한 요소 삭제

#include <bits/stdc++.h>
using namespace std;
int main() {
    map<int, int> TP_Map;
    TP_Map.insert({3, 50});
    TP_Map.insert({2, 30});
    TP_Map.insert({1, 10});
    TP_Map.insert({4, 70});
    cout<<"TP Map is : \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
       cout << i->first << "\t" << i->second << endl;
    }
    //맵의 값 삭제하기
    auto var = TP_Map.find(1);
    TP_Map.erase(var);
    auto var_1 = TP_Map.find(2);
    TP_Map.erase(var_1);
    cout<<"\n\nAfter erasing the element: \n";
    cout << "MAP_KEY\tMAP_ELEMENT\n";
    for (auto i = TP_Map.begin(); i!= TP_Map.end(); i++) {
       cout << i->first << "\t" << i->second << endl;
    }
    return 0;
}

출력

TP Map is:
MAP_KEY    MAP_ELEMENT
1          10
2          30
3          50
4          70
After erasing the element:
MAP_KEY    MAP_ELEMENT
3          50
4          70

이번 예제에서는 find() 함수로 특정 키의 위치를 찾은 뒤, 그 반복자를 erase()에 전달하여 요소를 삭제했습니다. 두 방식 모두 동일한 결과를 출력하지만, 상황에 따라 키 기반 삭제가 더 간결하고, 반복자 기반 삭제는 이미 위치를 알고 있는 경우에 유용합니다.