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` 的键时,你需要提供自定义哈希函数和相等运算符的实现。这样才能正确地进行键的哈希和比较操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值