c++ 哈希表比对键值
时间: 2023-07-01 07:24:41 浏览: 160
比对哈希表中的键值可以使用哈希函数生成键的哈希值,然后将哈希值与表中的键的哈希值进行比较。如果两个哈希值相等,则再比较键的值是否相等。如果键的值也相等,则说明这两个键是相等的。在C++中,可以使用unordered_map容器来实现哈希表,其中键的哈希值是由容器内部的哈希函数生成的。我们可以通过重载键的等于运算符来比较键的值是否相等。下面是一个示例代码:
```c++
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
struct MyKey
{
int id;
string name;
bool operator==(const MyKey& other) const
{
return id == other.id && name == other.name;
}
};
namespace std
{
template<>
struct hash<MyKey>
{
size_t operator()(const MyKey& key) const
{
return hash<int>()(key.id) ^ hash<string>()(key.name);
}
};
}
int main()
{
unordered_map<MyKey, int> myMap;
MyKey key1 = {1, "Alice"};
MyKey key2 = {2, "Bob"};
myMap[key1] = 100;
myMap[key2] = 200;
MyKey key3 = {1, "Alice"};
if(myMap.count(key3) > 0)
{
cout << "Found: " << myMap[key3] << endl;
}
else
{
cout << "Not found" << endl;
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体MyKey作为键的类型,并重载了它的等于运算符和哈希函数。然后使用MyKey作为unordered_map容器的键类型。在主函数中,我们向哈希表中添加了两个键值对,然后通过一个与已存在的键值对相等的键来查询哈希表。由于MyKey的等于运算符和哈希函数已经正确实现,所以可以正确地找到已存在的键值对。
阅读全文