C++/C++
[C++] unordered_map
2025. 12. 22. 00:57반응형
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
반응형
'C++ > C++' 카테고리의 다른 글
| (수정중) [C++] string 그리고 & (3) | 2025.08.09 |
|---|---|
| [C++] string 초기화 및 생성자 (1) | 2025.08.09 |
| [C/C++] SIGSEGV, SIGABRT 등 시그널(Signal) 에러에 관한 고찰 (0) | 2025.06.04 |
| [C/C++] Signal(시그널) 종류 및 설명 (0) | 2025.06.04 |
| [C++] 가변인자를 다른 함수로 바로(by pass) 전달하는 방법 (0) | 2025.05.09 |
