반응형

 

unordered_map

키-값 쌍을 저장하는 해시 테이블 기반 자료구조이다.
- 해시 테이블 기반이며, 내부적으로 해시 함수를 사용해 키를 버킷에 매핑한다. 이로 인해 평균적으로 O(1)의 빠른 검색, 삽입, 삭제 성능을 제공한다.  (버킷은 해시 테이블에서 요소들을 저장하는 개별 저장 공간을 의미)

- 정렬되지 않은 키: map과 달리 키가 정렬되지 않는다. 요소들은 해시 값에 따라 무작위로 저장된다.
- 유일한 키: 각 키는 하나만 존재할 수 있다. 중복 키를 허용하려면 unordered_multimap을 사용해야 한다.

 

예제

#include <unordered_map>
#include <string>
#include <iostream>

int main() {
    // 선언
    std::unordered_map<std::string, int> ages;

    // 삽입
    ages["Alice"] = 25;
    ages["Bob"] = 30;
    ages.insert({ "Charlie", 35 });

    // 검색
    if (ages.find("Alice") != ages.end()) {
        std::cout << "Alice: " << ages["Alice"] << std::endl;
    }
    std::cout << "----------------------------" << std::endl;
    // 순회 (C++11 이상)
    for (const auto& pair : ages) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    std::cout << "----------------------------" << std::endl;
    // 또는 iterator 사용
    for (auto it = ages.begin(); it != ages.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }
    std::cout << "----------------------------" << std::endl;
    // 삭제
    ages.erase("Bob");
    std::cout << "after erase. ages.size(): " << ages.size() << std::endl;
    for (const auto& pair : ages) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    std::cout << "----------------------------" << std::endl;
    // find() 사용
    auto it = ages.find("Alice");
    if (it != ages.end()) {
        // 찾음
        std::cout << "Key: " << it->first << std::endl;
        std::cout << "Value: " << it->second << std::endl;
    }
    else {
        // 못 찾음
        std::cout << "Key not found" << std::endl;
    }
    std::cout << "----------------------------" << std::endl;
    // 없는 키 검색
    auto it2 = ages.find("David");
    if (it2 == ages.end()) {
        std::cout << "David not found" << std::endl;
    }

    return 0;
}

 

출력결과

Alice: 25
----------------------------
Alice: 25
Bob: 30
Charlie: 35
----------------------------
Alice: 25
Bob: 30
Charlie: 35
----------------------------
after erase. ages.size(): 2
Alice: 25
Charlie: 35
----------------------------
Key: Alice
Value: 25
----------------------------
David not found

함수

find 함수

find()함수는 특정 키를 가진 요소를 검색하는 메서드이다.

 

  • 키를 찾은 경우: 해당 요소를 가리키는 iterator 반환
  • 키를 찾지 못한 경우: end() iterator 반환

 

iterator find(const Key& key);
const_iterator find(const Key& key) const;

 

count 함수

count() 함수는 특정 키가 존재하는지 확인한다.

  • 키가 존재: 1 반환
  • 키가 없음: 0 반환

unordered_map은 중복 키를 허용하지 않으므로 항상 0 또는 1만 반환한다.

size_type count(const Key& key) const;

 

실용 예시

    // count() 사용
    if (data.count("apple") > 0) {
        std::cout << "apple 존재함" << std::endl;
    }
    
    if (data.count("orange") == 0) {
        std::cout << "orange 존재하지 않음" << std::endl;
    }

 


참고

https://en.cppreference.com/w/cpp/container/unordered_map.html

 
반응형