c++自定义结构体作为unordered_map的索引值时,如何自定义unordered_map的哈希函数
时间: 2024-03-29 12:33:29 浏览: 148
在C++中,可以使用自定义的结构体作为`unordered_map`的索引值,同时也可以自定义`unordered_map`的哈希函数。下面是一个示例:
```cpp
#include <iostream>
#include <unordered_map>
// 自定义结构体
struct MyStruct {
int x;
int y;
};
// 自定义哈希函数
struct MyStructHash {
std::size_t operator()(const MyStruct& s) const {
// 使用自定义的哈希算法,将结构体转换为哈希值
return std::hash<int>()(s.x) ^ std::hash<int>()(s.y);
}
};
int main() {
// 创建一个使用自定义结构体和哈希函数的unordered_map
std::unordered_map<MyStruct, int, MyStructHash> myMap;
// 添加元素
MyStruct key1{1, 2};
myMap[key1] = 10;
// 查找元素
if (myMap.find(key1) != myMap.end()) {
std::cout << "Value: " << myMap[key1] << std::endl;
}
return 0;
}
```
在上面的示例中,我们首先定义了一个自定义的结构体`MyStruct`,然后定义了一个自定义的哈希函数`MyStructHash`。在`MyStructHash`中,我们使用了`std::hash`来计算结构体中每个成员变量的哈希值,并将它们进行异或操作得到最终的哈希值。
接下来,在创建`unordered_map`时,我们指定了自定义结构体`MyStruct`作为键类型,指定了自定义哈希函数`MyStructHash`作为哈希函数类型。这样就可以使用自定义结构体作为`unordered_map`的索引值,并且使用自定义的哈希函数来计算哈希值。
阅读全文