C++의 std::map은 키(key)와 값(value)을 하나의 쌍(pair)으로 묶어 저장하는 연관 컨테이너입니다. 맵 내부에는 std::pair 객체들이 저장되며, 각 pair는 하나의 키와 그에 대응하는 값을 담고 있습니다. 키와 값은 템플릿으로 구현되어 있기 때문에 int, char, string 등 어떤 자료형이든 자유롭게 사용할 수 있습니다.
이러한 맵을 순회할 때 가장 간결하고 가독성 좋은 방법이 바로 C++11부터 도입된 범위 기반 for 루프(range-based for loop)입니다. 루프 변수를 auto&로 선언하면 맵의 각 요소(pair)를 처음부터 끝까지 자동으로 순회하며, first 멤버로 키를, second 멤버로 값에 접근할 수 있습니다.
예제 코드
아래 예제에서는 문자(char)를 키로, 문자열(string)을 값으로 갖는 맵을 만들고, 범위 기반 for 루프로 모든 키-값 쌍을 출력합니다.
#include<iostream>
#include<map>
using namespace std;
main() {
map<char, string> my_map;
my_map.insert(pair<char, string>('A', "Apple"));
my_map.insert(pair<char, string>('B', "Ball"));
my_map.insert(pair<char, string>('C', "Cat"));
my_map.insert(pair<char, string>('D', "Dog"));
my_map.insert(pair<char, string>('E', "Eagle"));
my_map.insert(pair<char, string>('F', "Flag"));
my_map.insert(pair<char, string>('G', "Ghost"));
my_map.insert(pair<char, string>('H', "Hill"));
my_map.insert(pair<char, string>('I', "India"));
my_map.insert(pair<char, string>('J', "Jug"));
for(auto& key_val : my_map) {
cout << "The " << key_val.first << " is pointing to: " << key_val.second << endl;
}
}실행 결과
The A is pointing to: Apple The B is pointing to: Ball The C is pointing to: Cat The D is pointing to: Dog The E is pointing to: Eagle The F is pointing to: Flag The G is pointing to: Ghost The H is pointing to: Hill The I is pointing to: India The J is pointing to: Jug
핵심 포인트 정리
- auto& key_val : 맵의 각 요소인
std::pair<const char, string>에 대한 참조입니다. 복사 오버헤드 없이 요소에 접근할 수 있습니다. - key_val.first : 현재 요소의 키(여기서는 문자 'A'~'J')를 나타냅니다.
- key_val.second : 현재 요소의 값(여기서는 문자열)을 나타냅니다.
- 정렬된 순서 보장 :
std::map은 키를 기준으로 오름차순 정렬되어 있으므로, 삽입 순서와 관계없이 항상 키 순서대로 순회됩니다.
참고로 구조적 바인딩(C++17 이상)을 사용하면 for(auto& [key, value] : my_map) 형태로 작성하여 더욱 직관적으로 키와 값을 다룰 수도 있습니다.