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;
相关推荐
数据知道14 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法
SeaTunnel15 小时前
Redis 数据迁移不用写脚本:SeaTunnel 支持 String、Hash、Set、ZSet 四种数据类型
数据库·redis·哈希算法·数据迁移·seatunnel·数据同步
动词ing18 小时前
【学习笔记】数据结构(哈希表基础+哈希集合+哈希映射+计数+查找)
数据结构·学习·哈希算法
shirsl20 小时前
算法 Day1-数组 / 哈希 + 双指针
python·算法·哈希算法
小袁拒绝摆烂1 天前
一条 SQL 从 30 秒到 300 毫秒:聊聊 MySQL 的 Hash Join
sql·mysql·哈希算法
吞下星星的少年·-·2 天前
LeetCode 热题 100 两数之和(哈希表)
算法·leetcode·哈希算法
Thomas21432 天前
spark sort shuffer 和 hash shuffer 图解对比
算法·哈希算法
淡海水3 天前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
刘广睿4 天前
素材去重为什么难?文件指纹、感知哈希与相似度判定的设计笔记
算法·哈希算法·产品设计·素材管理
辰烨chenye4 天前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法