假设我有一个C ++类
class T {
Type1 member1;
Type2 member2;
Type3 member3;
unsigned long hash() {
// How to implement?
}
};
假设每个成员散列哈希函数member.hash()
。实现类hash
的{{1}}函数的最佳方法是什么? Java有一个特定于此任务的T
类,C ++中有对应的吗?
我知道一种可能的解决方案可能是
HashCodeBuilder
这通常是一个很好的哈希函数吗?我应该如何选择常数17,37等,尤其是如果我超过3名成员?
另一个小问题是假设我的一个成员是原始类型(member1.hash() + member2.hash() * 17 + member3.hash() * 37
,int
,float
等),我应该如何从中生成哈希值?
答案 0 :(得分:3)
Boost对此有所帮助:hash_combine
size_t seed = 0;
boost::hash_combine(seed, member1);
boost::hash_combine(seed, member2);
boost::hash_combine(seed, member3);
return seed;
答案 1 :(得分:0)
如果您使用std
中的无序容器,您可以考虑http://en.cppreference.com/w/cpp/utility/hash
std::size_t operator()(S const& s) const
{
std::size_t h1 = std::hash<std::string>()(s.first_name);
std::size_t h2 = std::hash<std::string>()(s.last_name);
return h1 ^ (h2 << 1);
}