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

C++ std::map에서 범위 기반 for 루프 사용하는 방법

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) 형태로 작성하여 더욱 직관적으로 키와 값을 다룰 수도 있습니다.