c++hash函数头文件
时间: 2023-07-29 07:12:10 浏览: 298
c++的头文件
C++ 中的哈希函数有很多种,但是没有一个标准的哈希函数库。不过,C++11 引入了一个新的哈希函数头文件 `functional` ,其中定义了两个模板类 `hash` 和 `hash_combine` ,可以用于自定义哈希函数。
以下是使用 `functional` 头文件定义哈希函数的示例代码:
```c++
#include <iostream>
#include <string>
#include <functional>
using namespace std;
struct Person {
string name;
int age;
};
class PersonHash {
public:
size_t operator()(const Person& p) const {
return hash<string>()(p.name) ^ hash<int>()(p.age);
}
};
int main() {
unordered_map<Person, int, PersonHash> m;
Person p1{"Alice", 20};
Person p2{"Bob", 25};
m[p1] = 1;
m[p2] = 2;
cout << m[p1] << endl;
cout << m[p2] << endl;
return 0;
}
```
在上面的示例代码中,我们定义了一个结构体 `Person` ,包含两个属性 `name` 和 `age` 。然后我们定义了一个类 `PersonHash` ,其中重载了圆括号运算符 `operator()` ,用于计算 `Person` 对象的哈希值。在 `operator()` 中,我们使用了 `hash` 模板类的默认哈希函数来计算 `name` 和 `age` 的哈希值,并使用异或运算符 `^` 将它们合并成一个哈希值。
最后,我们使用 `unordered_map` 容器来存储 `Person` 对象和对应的值,并使用自定义的哈希函数类 `PersonHash` 作为容器的第三个模板参数。
阅读全文