我有一个包含15个无符号长整数的数据结构,我使用hash_combine定义了一个散列函数,如下所示:
friend std::size_t hash_value(const TUPLE15& given)
{
std::size_t seed = 0;
boost::hash_combine(seed, val1);
boost::hash_combine(seed, val2);
...
return seed;
}
我在boost :: unordered_map中插入了大量值,但性能不够好。也许,我可以用另一种散列函数做得更好。为了证实这一点,我需要检查我得到的碰撞次数。我该怎么做?
答案 0 :(得分:1)
如何比较元组数与唯一哈希值的数量?
set<size_t> hash_values;
BOOST_FOREACH(const TUPLE15& tuple, tuples)
hash_values.insert(hash_value(tuple));
size_t collisions = tuple_map.size() - hash_values.size();
或
size_t collisions = 0;
for (size_t bucket = 0; bucket != tuples.bucket_count(); ++bucket)
if (tuples.bucket_size(bucket) > 1)
collisions += tuples.bucket_size(bucket) - 1;