Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 딕셔너리를 C++로 구현하는 방법

파이썬의 딕셔너리(dict)는 내부적으로 해시맵(Hashmap) 구조로 구현되어 있습니다. 따라서 C++에서는 동일한 동작을 재현하기 위해 map 자료구조를 사용할 수 있습니다.

C++ map으로 파이썬 dict 흉내 내기

C++의 std::map은 키-값 쌍을 저장하는 연관 컨테이너로, 파이썬 딕셔너리와 매우 유사한 방식으로 사용할 수 있습니다. 아래 예제는 초기화 리스트(initializer_list) 생성자를 활용해 map을 선언하고 순회하는 코드입니다.

#include <iostream>
#include <map>
using namespace std;

int main(void) {
    /* 초기화 리스트 생성자 사용 */
    map<char, int> m1 = {
        {'a', 1},
        {'b', 2},
        {'c', 3},
        {'d', 4},
        {'e', 5}
    };
    cout << "Map contains following elements" << endl;
    for (auto it = m1.begin(); it != m1.end(); ++it)
        cout << it->first << " = " << it->second << endl;
    return 0;
}

실행 결과

Map contains following elements
a = 1
b = 2
c = 3
d = 4
e = 5

위 C++ 코드의 map은 다음과 같은 파이썬 딕셔너리와 정확히 같은 역할을 합니다.

m1 = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4,
    'e': 5
}

map과 unordered_map의 차이점

참고로 C++에서는 두 가지 대표적인 해시 기반 컨테이너를 사용할 수 있습니다.

  • std::map: 내부적으로 균형 이진 탐색 트리(레드-블랙 트리)를 사용하며, 키가 항상 정렬된 상태로 유지됩니다. 조회·삽입·삭제의 시간 복잡도는 O(log n)입니다.
  • std::unordered_map: 실제 해시 테이블 기반으로 동작하므로 파이썬 딕셔너리와 더욱 유사합니다. 평균적으로 O(1)의 시간 복잡도를 가지지만, 요소들의 순서는 보장되지 않습니다.

순서가 중요하지 않다면 성능 면에서 unordered_map을 사용하는 것이 더 좋은 선택일 수 있습니다. 반면 키가 정렬된 상태로 순회해야 한다면 map을 사용하세요.