首页 > 后端开发 > C++ > 为什么我不能使用 `std::pair` 作为 `std::unordered_map` 中的键以及如何修复它?

为什么我不能使用 `std::pair` 作为 `std::unordered_map` 中的键以及如何修复它?

Linda Hamilton
发布: 2024-12-07 02:57:12
原创
867 人浏览过

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

为什么我不能编译一个以pair为key的unordered_map?

这里面临的问题是缺乏合适的哈希函数对于密钥类型。要解决此问题,请为密钥对提供自定义哈希函数。这是一个示例:

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

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;  // Simple example, for better results use boost.hash_combine
    }
};

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
登录后复制

使用此自定义哈希函数,您现在可以创建一个 unordered_map没有编译错误。请注意,此处提供的哈希函数出于演示目的而过于简单化。对于现实场景,请考虑使用 Boost 的 boost.hash_combine 等技术来提高哈希函数的质量。

以上是为什么我不能使用 `std::pair` 作为 `std::unordered_map` 中的键以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

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