首页 >后端开发 >C++ >我可以在 C 无序映射中使用对作为键吗?如何使用?

我可以在 C 无序映射中使用对作为键吗?如何使用?

Linda Hamilton
Linda Hamilton原创
2024-12-16 14:11:10130浏览

Can I Use Pairs as Keys in C   Unordered Maps, and How?

我可以在无序映射中使用 Pairs 作为键吗?

在 C 中,当将 unordered_map 与pair一起使用时,您可能会遇到编译错误它的关键。该问题是由于使用自定义类型作为键而没有为其提供适当的哈希函数而引起的。

理解错误

您遇到的错误是因为 unordered_map 依赖于基于哈希机制来有效地定位键值对。但是,它缺少针对复杂类型(例如对)的默认哈希函数。该错误消息表明编译器无法为您的键对类型隐式实例化未定义的哈希函数。

解决方案:提供哈希函数

要解决此问题,您需要定义一个哈希函数来计算您的投票对类型的唯一哈希值。此函数应接受一对作为参数并输出哈希值。

这是一个哈希函数实现示例:

struct pair_hash {
    template<class T1, class T2>
    std::size_t operator()(const std::pair<T1, T2> &p) const {
        auto h1 = std::hash<T1>()(p.first);
        auto h2 = std::hash<T2>()(p.second);
        return h1 ^ h2;
    }
};

使用此哈希函数,您可以修改代码以创建使用pair作为键的unordered_map:

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

现在,你可以按预期使用这个unordered_map,避免编译错误。

以上是我可以在 C 无序映射中使用对作为键吗?如何使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn