Account と Transaction の 2 つのオブジェクトがあります。ここで、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;
};
アカウントの hash_value メソッドは正しく機能し、返される値は特定のアカウントに対して常に一意ですが、一意のペアを作成するには、トランザクションのメソッドで hash _combine を使用する必要があります (ブーストの指示に従って):
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;
}
これにより、異なる入力に対して同じ値が返されることがあります。どうして??私は数千のアカウントしか持っておらず、ID 番号は数十万しかありません。これは上限の問題ではないようです。
これがバグなのか、それともブーストハッシュをシードする必要があるのか 誰か知っていますか?
ありがとう