使用boost :: unordered_map时如何计算键碰撞?

时间:2011-01-16 08:51:12

标签: c++ boost hashtable

我有一个包含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中插入了大量值,但性能不够好。也许,我可以用另一种散列函数做得更好。为了证实这一点,我需要检查我得到的碰撞次数。我该怎么做?

1 个答案:

答案 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;