[C++] unordered_map

2026.03.17. 11:33

unordered_map : 해시 기반 컨테이너
(헤더: #include <unordered_map>)


📦 기본 선언

#include <unordered_map>

std::unordered_map<std::string, int> m;

🔑 1. 값 삽입 (insert / [] / emplace)

✔️ insert

m.insert({"apple", 3});

✔️ operator[]

m["banana"] = 5;
  • key 없으면 자동 생성됨

✔️ emplace (추천)

m.emplace("orange", 7);
  • 불필요한 복사 없이 삽입 (성능 좋음)


🔍 2. 값 접근

m["apple"];        // 값 반환 (없으면 생성됨 ⚠️)
m.at("apple");     // 값 반환 (없으면 예외 발생)

🔎 3. 탐색

✔️ find

auto it = m.find("apple");

if (it != m.end()) {
    std::cout << it->second;
}

✔️ count

if (m.count("apple")) {
    // 존재함
}

❌ 4. 삭제

m.erase("apple");       // key로 삭제
m.erase(it);            // iterator로 삭제
m.clear();              // 전체 삭제

📏 5. 크기 관련

m.size();       // 원소 개수
m.empty();      // 비었는지

🔁 6. 순회 (iteration)

for (auto& [key, value] : m) {
    std::cout << key << " " << value << "\n";
}

또는

for (auto it = m.begin(); it != m.end(); ++it) {
    std::cout << it->first << " " << it->second << "\n";
}

⚙️ 7. 기타 유용한 함수

✔️ bucket_count, load_factor

m.bucket_count();
m.load_factor();

✔️ rehash, reserve

m.reserve(1000);   // 미리 공간 확보 (성능 최적화)

⚡ 실무에서 자주 쓰는 핵심 TOP 5

m[key] = value;
m.find(key);
m.erase(key);
m.size();
for (auto& [k,v] : m)

⚠️ 중요한 포인트 (면접 단골)

1. unordered_map 특징

  • 평균 O(1)

  • 해시 기반

  • 순서 보장 ❌

2. [] 사용 주의

m["new_key"];  // 값 없으면 생성됨

한 줄 정리

unordered_map은 빠른 조회(O(1))를 위한 해시맵이고, insert / find / erase / []가 핵심이다.