unordered_map自定义key哈希
时间: 2023-08-14 14:13:17 浏览: 57
您可以通过重载自定义键类型的哈希函数来为`unordered_map`提供自定义的键哈希。以下是一个示例,展示了如何为自定义结构`MyKey`提供自定义的哈希函数:
```cpp
#include <unordered_map>
struct MyKey {
int key1;
int key2;
// 其他成员变量...
};
bool operator==(const MyKey& lhs, const MyKey& rhs) {
return lhs.key1 == rhs.key1 && lhs.key2 == rhs.key2;
}
// 自定义哈希函数
struct MyKeyHash {
std::size_t operator()(const MyKey& key) const {
// 使用哈希算法计算哈希值
std::size_t h1 = std::hash<int>{}(key.key1);
std::size_t h2 = std::hash<int>{}(key.key2);
// 合并哈希值
return h1 ^ (h2 << 1);
}
};
int main() {
std::unordered_map<MyKey, int, MyKeyHash> myMap;
// 在这里使用自定义键类型的unordered_map...
return 0;
}
```
在上面的示例中,我们首先定义了自定义的键类型`MyKey`,并重载了`operator==`运算符来比较键的相等性。然后,我们定义了一个名为`MyKeyHash`的结构体,其中重载了函数调用运算符`operator()`来计算键的哈希值。最后,在声明`unordered_map`时,我们将自定义的哈希函数`MyKeyHash`作为模板参数传递给`unordered_map`。这样,`unordered_map`将使用我们提供的自定义哈希函数来计算键的哈希值。