파이썬의 딕셔너리(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을 사용하세요.