이 글에서는 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()에 전달하여 요소를 삭제했습니다. 두 방식 모두 동일한 결과를 출력하지만, 상황에 따라 키 기반 삭제가 더 간결하고, 반복자 기반 삭제는 이미 위치를 알고 있는 경우에 유용합니다.