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;
相关推荐
-dzk-6 小时前
【哈希】LC 49.字母异位词分组
算法·哈希算法
数行拙笔10 小时前
Redis---hash类型
数据库·redis·哈希算法
不负岁月无痕13 小时前
STL --C++哈希表封装unordered_map/set
c++·visualstudio·哈希算法·散列表·unordered
影寂ldy2 天前
C# 五大加密算法全套实战(AES/DES对称、RSA非对称、MD5/SHA256哈希)
开发语言·c#·哈希算法
旖-旎3 天前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
被自己蠢哭3 天前
两数之和:哈希(LeetCode 热题 100)
python·算法·哈希算法
Keepingrun3 天前
编码、加密、Hash、序列化和字符集
算法·哈希算法
阿pin4 天前
Java随笔-ConcurrentHashMap
java·开发语言·哈希算法
yh弓长4 天前
Redis的hash类及主要指令
redis·哈希算法
Let's Chat Coding10 天前
哈希算法:密码学的基础构件
算法·哈希算法