unordered_map自定义数据类型
时间: 2023-09-29 21:02:31 浏览: 146
unordered_map 是 C++ 标准库中的容器,用于实现键值对的映射。默认情况下,unordered_map 可以使用基本数据类型作为键和值,如 int、double、string 等。但是,如果你想要使用自定义的数据类型作为键或值,需要满足以下两个条件:
1. 自定义数据类型需要定义哈希函数(hash function):unordered_map 使用哈希函数将键映射到特定的存储桶中。你需要为自定义数据类型实现一个哈希函数,以便 unordered_map 可以正确地定位和操作键值对。
2. 自定义数据类型需要定义相等运算符(equality operator):unordered_map 使用相等运算符来比较两个键是否相等。你需要为自定义数据类型实现相等运算符,以便 unordered_map 可以正确地判断键的相等性。
下面是一个示例,演示了如何在 unordered_map 中使用自定义数据类型:
```cpp
#include <iostream>
#include <unordered_map>
class MyCustomType {
public:
int x;
int y;
bool operator==(const MyCustomType& other) const {
return (x == other.x) && (y == other.y);
}
};
// 哈希函数的实现
// 这里简单地将 x 和 y 的值相加作为哈希值
struct MyCustomTypeHash {
std::size_t operator()(const MyCustomType& obj) const {
return std::hash<int>()(obj.x + obj.y);
}
};
int main() {
std::unordered_map<MyCustomType, int, MyCustomTypeHash> myMap;
MyCustomType key1;
key1.x = 1;
key1.y = 2;
MyCustomType key2;
key2.x = 3;
key2.y = 4;
myMap[key1] = 10;
myMap[key2] = 20;
std::cout << myMap[key1] << std::endl; // 输出 10
std::cout << myMap[key2] << std::endl; // 输出 20
return 0;
}
```
在上述示例中,我们定义了一个名为 MyCustomType 的自定义数据类型,并为其实现了相等运算符和哈希函数。然后,我们使用 MyCustomType 作为 unordered_map 的键类型,并将 MyCustomTypeHash 作为自定义的哈希函数。这样,我们就可以在 unordered_map 中使用自定义的数据类型了。
阅读全文