有关C++哈希函数的常用形式,具体解释见注释
#pragma once
#include<unordered_set>
#include<unordered_map>
namespace hash_function {
//计算对应的哈希码
template<typename T>
inline void hash_combine(size_t& seed, const T& val) {
seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
}
//函数递归的出口,即参数最终分解为一个
template<typename T>
inline void hash_val(size_t& seed, const T& val) {
hash_combine(seed, val);
}
//将参数进行分解
template<typename T, typename... Types>
inline void hash_val(size_t& seed, const T& val,const Types&...args) {
hash_combine(seed, val);
hash_val(seed, args...);
return seed;
}
//将参数传入
template<typename... Types>
inline size_t hash_val(const Types&...args) {
size_t seed = 0;
hash_val(seed, args...);
return seed;
}
}
#pragma once#include<unordered_set>#include<unordered_map>namespace hash_function {//计算对应的哈希码template<typename T>inline void hash_combine(size_t& seed, const T& val) {seed ^= std::hash<T>()(val) + 0x9e3779b9 + (seed << 6) + (seed >> 2);}//函数递归的出口,即参数最终分解为一个template<typename T>inline void hash_val(size_t& seed, const T& val) {hash_combine(seed, val);}//将参数进行分解template<typename T, typename... Types>inline void hash_val(size_t& seed, const T& val,const Types&...args) {hash_combine(seed, val);hash_val(seed, args...);return seed;}//将参数传入template<typename... Types>inline size_t hash_val(const Types&...args) {size_t seed = 0;hash_val(seed, args...);return seed;}
}

浙公网安备 33010602011771号