pair作为unordered_map的key报错

问题

pair作为unordered_map的key报错,编译时会报错

原因

因为pair没有哈希函数

解决方法

定义哈希函数

cpp 复制代码
template <typename T>
inline void hash_combine(std::size_t &seed, const T &val) {
    seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
// auxiliary generic functions to create a hash value using a seed
template <typename T> inline void hash_val(std::size_t &seed, const T &val) {
    hash_combine(seed, val);
}
template <typename T, typename... Types>
inline void hash_val(std::size_t &seed, const T &val, const Types &... args) {
    hash_combine(seed, val);
    hash_val(seed, args...);
}

template <typename... Types>
inline std::size_t hash_val(const Types &... args) {
    std::size_t seed = 0;
    hash_val(seed, args...);
    return seed;
}

struct pair_hash {
    template <class T1, class T2>
    std::size_t operator()(const std::pair<T1, T2> &p) const {
        return hash_val(p.first, p.second);
    }
};

使用

cpp 复制代码
unordered_map<pair<long long, long long>, long long, pair_hash> slopeCount;
相关推荐
黄金龙PLUS10 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
夏幻灵16 小时前
每日一题:LeetCode 20:有效的括号——栈与哈希映射详解
算法·leetcode·哈希算法
积流成海1 天前
一致性哈希原理与实现:分布式系统负载均衡
算法·负载均衡·哈希算法·哈希函数·盘子工具站
程序员清风2 天前
哈希表:从键值映射到高效查找
数据结构·哈希算法·散列表
啦啦啦啦啦zzzz2 天前
一致性哈希
服务器·算法·哈希算法·c++20·分布式存储
蒸蒸yyyyzwd2 天前
秋招笔记day58
算法·哈希算法
for_ever_love__2 天前
缓存穿透、击穿、雪崩:三个经典问题与完整解决方案
java·数据库·redis·缓存·哈希算法·布隆过滤器·雪崩
谢亮_vipxieliang2 天前
Go map与结构体的正确使用
开发语言·golang·哈希算法
DongQiShanRen3 天前
裁决台账双向互校(下):台账哈希链、三向对账与最小落地
人工智能·深度学习·算法·目标跟踪·自然语言处理·rust·哈希算法
Cccp.1233 天前
【leetcode】(九)哈希函数与哈希表
数据结构·leetcode·哈希算法