unordered_map hash函数
时间: 2023-10-18 14:30:43 浏览: 115
unordered_map 是 C++ 中的一个容器,用于存储键值对,其中键是唯一的且无序的。在 unordered_map 中,hash 函数用于将键映射到桶(存储位置),以便实现快速的查找和插入操作。
默认情况下,unordered_map 使用 std::hash 作为其默认的哈希函数。std::hash 是一个通用的哈希函数对象,用于将不同类型的键转换为哈希值。它通过调用类型特定的哈希函数来执行这个转换。
如果你想使用自定义的哈希函数,你可以提供一个哈希函数对象作为 unordered_map 的第二个模板参数。这个哈希函数对象需要实现一个名为 operator() 的函数,接受一个键作为参数,并返回一个哈希值。
下面是一个使用自定义哈希函数的示例:
```cpp
#include <unordered_map>
#include <iostream>
struct MyHashFunction {
std::size_t operator()(const std::string& key) const {
// 自定义哈希算法
std::size_t hashValue = 0; for (char c : key) {
hashValue += c;
}
return hashValue;
}
};
int main() {
std::unordered_map<std::string, int, MyHashFunction> myMap;
// 使用自定义哈希函数插入键值对
myMap["apple"] = 1;
myMap["banana"] = 2;
// 访问键值对
std::cout << myMap["apple"] << std::endl;
std::cout << myMap["banana"] << std::endl;
return 0;
}
```
在上面的例子中,我们定义了一个名为 MyHashFunction 的结构体,它重载了 operator() 函数来实现自定义的哈希算法。然后我们将 MyHashFunction 作为 unordered_map 的第二个模板参数传递,以使用这个自定义的哈希函数。
请注意,自定义的哈希函数应该尽可能地生成均匀分布的哈希值,以避免键之间产生冲突,从而影响性能。
阅读全文