我有两个对象,Account 和 Transaction,其中 Transaction 是唯一的一对 Account 和一个递增的 ID 号。我想使用 boost::hash 来获取这些的唯一值,并按照说明重载了 hash_value 方法:http: //www.boost.org/doc/libs/1_53_0/doc/html/hash/custom.html
class Account {
...
};
class Transaction
{
Account account;
unsigned int id;
};
Account 的 hash_value 方法可以正常工作,并且返回的值对于给定的帐户始终是唯一的,但是要制作唯一的对,Transaction 的方法需要使用 hash _combine (根据 boost 的说明):
inline std::size_t hash_value( const Account& acct )
{
boost::hash<int> hasher;
size_t rval = hasher( acct.id() ); //just an int. guaranteed to be unique
return rval;
}
inline std::size_t hash_value( const Transaction& t )
{
std::size_t seed = 0;
boost::hash_combine( seed, t.account );
boost::hash_combine( seed, t.id );
return seed;
}
这有时会为不同的输入返回相同的值。为什么??我只有几千个账号,身份证号才上几十万。这似乎不是一个上限问题。
有谁知道这是否是一个错误,或者我是否需要播种 boost hash?
谢谢