本文主要是介绍一个万用哈希函数(Hash Function)的写法whit C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用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 Function)的写法whit C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!