[C++] STL로 해시 테이블(Hash Table) 만들기 (std::unordered_map, std::unordered_set)
Source Code/C++ 2021. 5. 28. 17:07728x90
728x170
STL로 해시 테이블(Hash Table) 만들기
서론
C++의 STL을 이용하여 해시 테이블(Hash Table)을 구현할 수 있다.std::unordered_map
과 std::unordered_set
을 이용한다.
이 방법으로 해시 테이블을 구현할 경우 원소의 순서가 보장되지 않으며, 원소의 순서를 보장하도록 만들기 위해서는 std::unordered_multimap
또는 std::unordered_multiset
을 이용하여 구현하면 된다.
코드
#include <iostream>
#include <unordered_map>
#include <unordered_set>
void print(const std::unordered_set<int>& container) {
for (const auto& element : container) {
std::cout << element << " ";
}
std::cout << std::endl;
}
void print(const std::unordered_map<int, int>& container) {
for (const auto& element : container) {
std::cout << element.first << " -> " << element.second << ", ";
}
std::cout << std::endl;
}
void find(const std::unordered_set<int>& container, const int element) {
if (container.find(element) == container.end()) {
std::cout << element << " 검색: 실패" << std::endl;
}
else {
std::cout << element << " 검색: 성공" << std::endl;
}
}
void find(const std::unordered_map<int, int>& container, const int element) {
auto it = container.find(element);
if (it == container.end()) {
std::cout << element << " 검색: 실패" << std::endl;
}
else {
std::cout << element << " 검색: 성공, 값 = " << it->second << std::endl;
}
}
int main() {
std::cout << "*** std::unordered_set 예제 ***" << std::endl;
std::unordered_set<int> set1 = {1, 2, 3, 4, 5};
std::cout << "set1 초기값: ";
print(set1);
set1.insert(2);
std::cout << "2 삽입: ";
print(set1);
set1.insert(10);
set1.insert(300);
std::cout << "10, 300 삽입: ";
print(set1);
find(set1, 4);
find(set1, 100);
set1.erase(2);
std::cout << "2 삭제: ";
print(set1);
find(set1, 2);
std::cout << "*** std::unordered_map 예제 ***" << std::endl;
std::unordered_map<int, int> squareMap;
squareMap.insert({2, 4}); // 삽입 방법 1
squareMap[3] = 9; // 삽입 방법 2
std::cout << "2, 3의 제곱 삽입: ";
print(squareMap);
squareMap[20] = 400;
squareMap[30] = 900;
std::cout << "20, 30의 제곱 삽입: ";
print(squareMap);
find(squareMap, 10);
find(squareMap, 20);
std::cout << "squareMap[3] = " << squareMap[3] << std::endl;
std::cout << "squareMap[100] = " << squareMap[100] << std::endl;
print(squareMap);
return 0;
}
결과 확인
*** std::unordered_set 예제 ***
set1 초기값: 5 1 2 3 4
2 삽입: 5 1 2 3 4
10, 300 삽입: 10 5 1 2 300 3 4
4 검색: 성공
100 검색: 실패
2 삭제: 10 5 1 300 3 4
2 검색: 실패
*** std::unordered_map 예제 ***
2, 3의 제곱 삽입: 3 -> 9, 2 -> 4,
20, 30의 제곱 삽입: 30 -> 900, 20 -> 400, 3 -> 9, 2 -> 4,
10 검색: 실패
20 검색: 성공, 값 = 400
squareMap[3] = 9
squareMap[100] = 0
100 -> 0, 2 -> 4, 3 -> 9, 20 -> 400, 30 -> 900,
728x90
그리드형(광고전용)
'Source Code > C++' 카테고리의 다른 글
[C++] 3개의 숫자 중에서 최댓값 구하기 (max(a, b, c)) (0) | 2022.12.13 |
---|---|
[C++] 조직 구조도 만들기 (이진 트리 이용) (0) | 2021.05.15 |
[C++] 다양한 타입의 데이터 여러 개를 인자로 받아 공통 타입으로 변환하는 함수 (0) | 2021.05.08 |
[C++] 정수를 입력 받아 각 자릿수의 합 구하기 (0) | 2021.02.17 |
Python Range() 함수 구현 (0) | 2021.01.20 |
0부터 N까지 피보나치 수열 나열하기 (0) | 2020.12.28 |
숫자 N의 약수의 개수 구하기 (0) | 2020.12.26 |
0부터 n까지의 숫자의 2진수 출력하기 (0) | 2017.10.10 |