unordered_map复杂数据类型
时间: 2023-10-15 18:22:43 浏览: 97
在C++中,`unordered_map`是一个哈希表的实现,它可以用来存储键值对。`unordered_map`可以存储复杂数据类型作为键和值。要存储复杂数据类型,你需要定义一个自定义的哈希函数和相等比较函数。
下面是一个示例,展示如何使用`unordered_map`存储自定义的复杂数据类型:
```cpp
#include <iostream>
#include <unordered_map>
#include <string>
struct ComplexData {
int id;
std::string name;
// 重载==运算符
bool operator==(const ComplexData& other) const {
return id == other.id && name == other.name;
}
};
// 自定义哈希函数
struct ComplexDataHash {
std::size_t operator()(const ComplexData& data) const {
// 这里可以使用任何合适的哈希算法
std::size_t hash = std::hash<int>{}(data.id);
hash ^= std::hash<std::string>{}(data.name) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
return hash;
}
};
int main() {
std::unordered_map<ComplexData, int, ComplexDataHash> dataMap;
ComplexData data1{1, "John"};
ComplexData data2{2, "Alice"};
dataMap[data1] = 10;
dataMap[data2] = 20;
std::cout << dataMap[data1] << std::endl; // 输出 10
std::cout << dataMap[data2] << std::endl; // 输出 20
return 0;
}
```
在上面的示例中,我们定义了一个名为`ComplexData`的结构体,它包含一个整型的id和一个字符串的name。我们重载了`==`运算符,以便在比较两个`ComplexData`对象时使用。然后,我们定义了一个名为`ComplexDataHash`的结构体,它实现了自定义的哈希函数。
在`main()`函数中,我们创建了一个`unordered_map`,其中键的类型是`ComplexData`,值的类型是整型。我们将两个自定义数据类型作为键插入到`dataMap`中,并且可以使用它们进行查找和访问。
希望这个示例对你有帮助!如果还有其他问题,请随时提问。
阅读全文