본문 바로가기
Programming

C++에서 Dictionary를 초기화하는 방법

by 느리게 걷는 즐거움 2024. 11. 11.
반응형

C++에서 Dictionary를 초기화하는 방법

Python이나 JavaScript에서는 `dictionary`를 쉽게 사용할 수 있지만, C++에서는 비슷한 역할을 하는 `std::map` 또는 `std::unordered_map`을 사용합니다. 이 글에서는 C++에서 `std::map`과 `std::unordered_map`을 선언하고 초기화하는 다양한 방법을 살펴보겠습니다.

1. `std::map`과 `std::unordered_map`의 차이점

먼저 C++에서 자주 사용되는 두 가지 자료 구조인 `std::map`과 `std::unordered_map`의 차이를 간단히 알아봅시다.

  • `std::map: 키-값 쌍을 저장하는 정렬된 연관 컨테이너입니다. 키는 자동으로 정렬되며, 시간 복잡도는 O(log n)입니다.
  • `std::unordered_map`: 키-값 쌍을 저장하지만, 키는 해시 함수를 사용하여 저장하므로 순서가 없습니다. 일반적으로 O(1) 시간 복잡도를 갖습니다.

 

2. `std::map`과 `std::unordered_map` 선언 및 초기화

이제 `std::map`과 `std::unordered_map`을 초기화하는 여러 가지 방법을 살펴보겠습니다. 가장 기본적인 방법은 `std::map` 또는 `std::unordered_map`을 빈 상태로 선언한 후 나중에 데이터를 삽입하는 것입니다.

#include <iostream>
#include <map>
#include <unordered_map>

int main() {
    std::map<std::string, int> orderedMap;         // std::map 초기화
    std::unordered_map<std::string, int> unorderedMap;  // std::unordered_map 초기화
}

이 방법은 키-값 쌍을 추가하는 시점에서 `[]` 연산자나 `insert` 함수를 사용하여 삽입할 수 있습니다.

orderedMap["apple"] = 1;
unorderedMap["banana"] = 2;

C++11 이상에서는 생성자에서 초기값을 지정할 수 있습니다. `std::initializer_list`를 사용하여 초기화하는 방식입니다.

std::map<std::string, int> orderedMap = {
    {"apple", 1},
    {"banana", 2},
    {"cherry", 3}
};

std::unordered_map<std::string, int> unorderedMap = {
    {"apple", 1},
    {"banana", 2},
    {"cherry", 3}
};

이렇게 하면 키-값 쌍이 미리 초기화된 상태로 `map`이 생성됩니다. 이미 선언된 `std::map`이나 `std::unordered_map`에 데이터를 삽입할 때는 `insert` 함수를 사용할 수도 있습니다.

orderedMap.insert(std::make_pair("date", 4));
unorderedMap.insert({"elderberry", 5});

`insert` 함수는 `std::pair`를 사용하거나, `{key, value}` 형식으로 초기화할 수 있습니다. C++11 이후에는 `emplace` 함수를 사용할 수도 있습니다. `emplace`는 객체가 직접 생성되기 때문에 성능이 더 좋을 수 있습니다.

orderedMap.emplace("fig", 6);
unorderedMap.emplace("grape", 7);



반복문을 사용한 초기화

다른 자료구조에 있는 데이터를 `std::map`이나 `std::unordered_map`에 넣고 싶을 때는 반복문을 사용할 수 있습니다.

std::vector<std::pair<std::string, int>> fruits = { {"apple", 1}, {"banana", 2}, {"cherry", 3} };
std::map<std::string, int> orderedMap;

for (const auto& fruit : fruits) {
    orderedMap.insert(fruit);
}

위와 같이 반복문을 통해 다른 컨테이너의 데이터를 삽입할 수 있습니다.

C++에서 `std::map`과 `std::unordered_map`을 초기화하는 방법은 다양하며, 상황에 맞는 방법을 선택하면 됩니다. 초기화 방식은 크게 빈 맵 선언, 생성자 초기화, `insert`나 `emplace`를 사용한 초기화로 나눌 수 있습니다. C++11 이후부터는 `{}`을 사용한 초기화가 가능해졌기 때문에 코드를 간결하게 작성할 수 있습니다.


반응형