用C++写的一个万用哈希函数模板
template <typename T>
inline void hash_combine(size_t& seed, const T& val)
{
seed ^= hash<T>()(val) +
0x9e3779b9 +
(seed << 6) +
(seed << 2);
}
template <typename T, typename... Types>
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);
}
template <typename... Types>
inline void hash_val(const Types&... args)
{
size_t seed = 0;
hash_val(seed, args);
return seed;
}
应用举例
假设你有一个学生类Customer,其包含first name , last name以及学号,现在利用上面的万能哈希函数求得其哈希值,以决定该类实例放置于hashset中的位置。你就可以像下面这样调用它:
class CustomerHash{
public:
std::size_t operator()(const Customer& c)const{
return hash_val(c.fname, c.lname, c.no);
}
}
标签:hash,val,void,C++,seed,哈希,const,size,万用
From: https://blog.51cto.com/u_14592069/7714389