언어/Basic C++

[Basic C++] #72_unordered_map

Hardii2 2023. 12. 15. 20:15

 

#1. 개념

 

1. unordered_map

[정의] : unordered_map은 C++ STL에서 제공하는 연관 컨테이너입니다.
[특징] : unordered_map은 key와 value를 쌍으로 해시 자료구조에 저장합니다.
[map과 차이점] : unordered_map은 내부적으로 정렬 상태를 유지하지 않습니다.  

 


 

#2. 선언 및 초기화

#include <unordered_map>
using namespace std;

int main()
{
    // #1. 선언
    unordered_map<int, int> um;
    
    // #2. 초기화 리스트
    unordered_map<int, int> um = {
    	{1, 10},
        {2, 20},
        {3, 30}
    };
}

 

Details

 

1. [정렬 기준] : um 컨테이너는 map 컨테이너와 달리 내부적으로 정렬 작업을 수행하지 않습니다! 

 


 

#3. 탐색

 

1. 순회

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

for (auto it = umap.begin(); it != umap.end(); ++it) {
    std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}

 

Details

 

1. pair 형식 : 반복자를 활용해 unordered_map을 순회할 때, 반복자는 pair 형식의 원소를 가리킵니다.

 

2. 접근

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

// #1. operator[] : Key 값이 존재하는 것을 확실히 알고 있을때
int val = umap["banana"];
std::cout << "Value of 'banana': " << val << std::endl;

// #2. find() : Key 값의 존재여부가 불확실 할 때
auto it = umap.find("banana");
if (it != umap.end()) {
    std::cout << "Value of 'banana': " << it->second << std::endl;
} else {
    std::cout << "'banana' not found" << std::endl;
}

 

Details

 

1. operator [] : Key를 통해 Value에 접근할 수 있습니다. 다만, Key값이 분명히 존재할 때 활용!
2. find() : Key 값이 존재하는지 불분명할 때 활용!

 


 

#4. 삽입/제거

// #1. insert()
um.insert({3, 5}) or um.insert(make_pair(3,5));

// #2. operator[]
um[3] = 5;

// #3. erase(K)
um.erase(3);

// #4. erase(it)
auto it = um.find(3);
if(it != um.end())
	um.erase(it);