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

如何在 C 中使用对作为无序映射中的键?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-09 07:17:07719浏览

How to Use Pairs as Keys in Unordered Maps in C  ?

在无序映射中使用对作为键

尝试声明键为对的 unordered_map 时 (Vote =pair ;),很多人都会遇到意想不到的情况错误:

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'

出现此错误是因为 unordered_map 依赖于针对其键类型定制的哈希函数。由于默认的哈希函数不适用于对,因此您必须提供自定义哈希函数。

例如,考虑以下自定义哈希函数(pair_hash):

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

此哈希函数使用 XOR 运算符组合该对组件的哈希值。要使用它,请按如下方式修改 unordered_map 声明:

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

此方法允许通过提供合适的哈希函数来创建以对作为键的无序映射。然而,值得注意的是,这种简单的实现可能无法表现出最佳的哈希属性,请考虑探索 Boost 的 hash_combine 函数或设置 hash_value 以获得改进的结果。

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

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