c++ unordered_map 自定义类型
时间: 2023-10-28 20:59:05 浏览: 95
unordered_map_
你可以使用 C++ 的 `unordered_map` 来存储自定义类型。要在 `unordered_map` 中使用自定义类型作为键或值,你需要提供一些额外的信息。
首先,你需要为你的自定义类型实现哈希函数。哈希函数将根据对象的内容生成一个哈希值,这个值将用于在 `unordered_map` 中进行快速查找。你可以使用 `std::hash` 类型来生成哈希值,或者自己实现一个哈希函数。
接下来,你需要为你的自定义类型提供相等运算符(`operator==`)的实现。这是为了在 `unordered_map` 中执行键的比较操作。
以下是一个示例,展示了如何在 `unordered_map` 中存储自定义类型 `Person`:
```cpp
#include <iostream>
#include <unordered_map>
struct Person {
std::string name;
int age;
bool operator==(const Person& other) const {
return name == other.name && age == other.age;
}
};
// 自定义哈希函数
struct PersonHash {
std::size_t operator()(const Person& person) const {
std::size_t nameHash = std::hash<std::string>{}(person.name);
std::size_t ageHash = std::hash<int>{}(person.age);
return nameHash ^ ageHash;
}
};
int main() {
std::unordered_map<Person, std::string, PersonHash> personMap;
Person p1{"John", 25};
personMap[p1] = "Engineer";
Person p2{"Jane", 30};
personMap[p2] = "Manager";
// 输出值
std::cout << "Profession of John: " << personMap[p1] << std::endl;
std::cout << "Profession of Jane: " << personMap[p2] << std::endl;
return 0;
}
```
在此示例中,我们定义了一个 `Person` 结构体,它包含一个 `name` 字符串和一个 `age` 整数。我们为 `Person` 实现了相等运算符并创建了一个自定义的哈希函数 `PersonHash`。
然后,我们创建了一个 `personMap`,它的键是 `Person` 类型,值是 `std::string` 类型。我们可以将 `Person` 对象作为键插入到 `personMap` 中,并且可以使用键来访问对应的值。
请注意,在使用自定义类型作为 `unordered_map` 的键时,你需要提供自定义哈希函数和相等运算符的实现。这样才能正确地进行键的哈希和比较操作。
阅读全文