如何自定义unordered_map的哈希函数
时间: 2024-03-29 20:33:25 浏览: 73
unordered_map_
在C++中,可以通过自定义哈希函数来为`unordered_map`提供自定义的键值对哈希算法。下面是一种常见的自定义哈希函数的实现方式:
1. 创建一个结构体或类,命名为`HashFunc`,用于封装自定义的哈希函数。
2. 在`HashFunc`中定义一个重载的函数调用运算符`operator()`,该函数接受一个键值对作为参数,并返回一个哈希值。
3. 在`operator()`函数中,根据键值对的特征,计算出一个唯一的哈希值,并返回该值。
下面是一个示例代码,展示了如何自定义`unordered_map`的哈希函数:
```cpp
#include <iostream>
#include <unordered_map>
#include <string>
// 自定义哈希函数
struct HashFunc {
std::size_t operator()(const std::pair<int, std::string>& p) const {
// 根据键值对的特征计算哈希值
std::size_t hashValue = std::hash<int>{}(p.first);
hashValue ^= std::hash<std::string>{}(p.second) + 0x9e3779b9 + (hashValue << 6) + (hashValue >> 2);
return hashValue;
}
};
int main() {
// 创建一个使用自定义哈希函数的unordered_map
std::unordered_map<std::pair<int, std::string>, int, HashFunc> myMap;
// 向unordered_map中插入键值对
myMap[{1, "apple"}] = 10;
myMap[{2, "banana"}] = 20;
// 访问unordered_map中的元素
std::cout << myMap[{1, "apple"}] << std::endl; // 输出:10
std::cout << myMap[{2, "banana"}] << std::endl; // 输出:20
return 0;
}
```
在上述示例代码中,我们创建了一个使用自定义哈希函数`HashFunc`的`unordered_map`,并通过`std::pair<int, std::string>`作为键类型。`HashFunc`中的`operator()`函数根据键值对的特征计算哈希值,并返回该值。
阅读全文