首页 > 后端开发 > C++ > 如何解决使用 Pair Keys 的无序映射编译错误?

如何解决使用 Pair Keys 的无序映射编译错误?

DDD
发布: 2024-12-16 06:41:25
原创
332 人浏览过

How to Resolve Unordered Map Compilation Errors with Pair Keys?

使用键对的无序映射编译错误

尝试创建键为对的无序映射时,您可能会遇到以下错误:

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'
登录后复制

出现此错误是因为无序映射需要为其定义哈希函数关键类型。而哈希默认情况下可用,没有为pair提供哈希函数。

解决方案:提供自定义哈希函数

要解决此问题,您需要为您的密钥对类型定义自定义哈希函数。下面是一个示例实现:

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

此哈希函数使用按位 XOR (^) 组合该对各个组件的哈希值。

使用自定义哈希函数

定义了哈希函数后,您可以使用它来创建一个无序映射,其中键对为如下:

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

Unordered_map um;
登录后复制

通过此修改,将不再出现编译错误,并且您将能够按预期使用无序映射。

以上是如何解决使用 Pair Keys 的无序映射编译错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板