在C++中,std::unordered_map是一个哈希表实现的关联容器,用于存储键值对。默认情况下,std::unordered_map使用std::hash作为哈希函数,但是对于自定义类型,需要提供自定义的哈希函数。
要在std::unordered_map中存储自定义类型,需要完成以下几个步骤:
以下是一个示例,演示如何在std::unordered_map中存储自定义类型Person:
#include <iostream>
#include <unordered_map>
#include <functional>
class Person {
public:
std::string name;
int age;
Person(const std::string& n, int a) : name(n), age(a) {}
};
// 自定义哈希函数
struct PersonHash {
std::size_t operator()(const Person& p) const {
std::size_t h1 = std::hash<std::string>{}(p.name);
std::size_t h2 = std::hash<int>{}(p.age);
return h1 ^ h2;
}
};
// 自定义相等比较函数
struct PersonEqual {
bool operator()(const Person& p1, const Person& p2) const {
return p1.name == p2.name && p1.age == p2.age;
}
};
int main() {
std::unordered_map<Person, std::string, PersonHash, PersonEqual> personMap;
Person p1("Alice", 25);
Person p2("Bob", 30);
personMap[p1] = "Engineer";
personMap[p2] = "Manager";
std::cout << personMap[p1] << std::endl; // 输出:Engineer
std::cout << personMap[p2] << std::endl; // 输出:Manager
return 0;
}
在上述示例中,我们定义了一个Person类,该类具有name和age成员变量。然后,我们实现了PersonHash结构体作为哈希函数,使用std::hash对name和age进行哈希计算。同时,我们还实现了PersonEqual结构体作为相等比较函数,用于比较两个Person对象是否相等。
在主函数中,我们创建了一个std::unordered_map,键类型为Person,值类型为std::string。我们可以像使用普通的std::unordered_map一样使用personMap,存储和访问自定义类型Person的键值对。
对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,建议参考腾讯云官方文档或咨询腾讯云的技术支持团队,以获取与自定义类型在云计算中的存储相关的产品和解决方案。
领取专属 10元无门槛券
手把手带您无忧上云