C++에서 해시 함수는 데이터를 효율적으로 저장하고 검색하기 위해 사용됩니다. 이 기술은 대규모 데이터 집합을 다루거나 빠른 검색이 필요한 경우에 유용합니다. C++ 표준 라이브러리는 std::hash
템플릿 클래스를 제공하여 해시 함수를 구현하고 사용할 수 있도록 합니다.
std::hash
템플릿 클래스
std::hash
는 C++ 표준 라이브러리에서 제공하는 해시 함수 템플릿 클래스입니다. 이 클래스는 주어진 데이터에 대한 해시 값을 생성하는 기능을 제공합니다. 사용자는 std::hash
를 이용하여 자신만의 데이터 타입에 대한 해시 함수를 구현할 수 있습니다.
#include <iostream>
#include <functional>
struct MyData {
int id;
std::string name;
};
namespace std {
template<> struct hash<MyData> {
size_t operator()(const MyData& data) const {
size_t h1 = std::hash<int>{}(data.id);
size_t h2 = std::hash<std::string>{}(data.name);
return h1 ^ (h2 << 1);
}
};
}
위의 예제는 MyData
구조체에 대한 해시 함수를 구현하는 방법을 보여줍니다. std::hash
를 특수화하여 MyData
구조체에 대한 해시 함수를 정의하고 있습니다.
std::unordered_map
및 std::unordered_set
과의 사용
std::hash
클래스는 주로 std::unordered_map
및 std::unordered_set
과 함께 사용됩니다. 이들 컨테이너는 해시 함수를 사용하여 데이터를 저장하고 검색하므로, 사용자가 적절한 해시 함수를 제공해야 합니다. 위에서 정의한 MyData
구조체에 대한 해시 함수를 사용하여 std::unordered_map
를 생성하는 예제는 다음과 같습니다.
std::unordered_map<MyData, int> myMap;
myMap[{1, "Alice"}] = 10;
myMap[{2, "Bob"}] = 20;
결론
C++의 std::hash
클래스를 사용하여 사용자 정의 데이터 타입에 대한 해시 함수를 구현하고 std::unordered_map
및 std::unordered_set
과 함께 사용함으로써, 데이터를 효율적으로 저장하고 검색할 수 있습니다.
관련 참고 자료: cppreference.com - std::hash
본 문서는 C++에서의 해시 함수 사용에 대해 다루고 있습니다. C++ 표준 라이브러리 및 std::hash
에 대한 자세한 정보는 cppreference.com에서 확인할 수 있습니다.