C++ 표준 템플릿 라이브러리(STL)에서 std::map은 요소를 키-값 쌍으로 저장하는 연관 컨테이너입니다. 각 키는 고유하며 컨테이너는 키의 비교 함수(기본적으로 std::less)에 따라 요소를 자동으로 정렬된 상태로 유지합니다. 값은 어떤 타입이든 될 수 있으며 해당 키를 통해 접근합니다.
왜 std::map을 사용하는가?
키는 고유하고 정렬된 순서로 저장되어 빠른 조회 연산 제공 (O(log n))
보장된 순서가 있는 연관 배열 또는 딕셔너리가 필요한 시나리오에 이상적
내부적으로 균형 이진 탐색 트리(레드-블랙 트리)로 구현되어 모든 연산에서 신뢰할 수 있는 성능 제공
새 항목에는 insert() 사용; 중복은 묵시적으로 거부. 기존 키를 덮어쓰려면 insert_or_assign() 사용.
#include <map>
#include <iostream>
using namespace std;
int main() {
map<int, int> m{{1,3},{2,4},{3,5}};
m.insert({5,6}); // 새 쌍 추가
m.insert({1,8}); // 무시됨, 키 1 이미 존재
m.insert_or_assign(1,6); // 키 1의 값을 6으로 업데이트
cout << "Key\tElement\n";
for (auto& p : m) {
cout << p.first << '\t' << p.second << '\n';
}
return 0;
}
출력:
map에서 검색
find()로 키 찾기가 간단합니다. 키가 존재하면 반환된 반복자가 요소를 가리키고, 아니면 end() 반환.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<int, string> students;
students.insert({200, "Alice"});
students.insert({201, "John"});
if (auto it = students.find(201); it != students.end()) {
cout << "Key 201 has value: " << it->second << endl;
}
return 0;
}
출력:
map에서 데이터 삭제
요소는 키나 반복자로 제거 가능. erase() 메서드는 지워진 요소를 가리키는 반복자만 무효화.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> myMap;
myMap["cow"] = 1;
myMap["cat"] = 2;
myMap["lion"] = 3;
if (auto it = myMap.find("cat"); it != myMap.end()) {
myMap.erase(it);
}
for (auto& p : myMap) {
cout << p.first << ": " << p.second << endl;
}
return 0;
}