CMap - 如果我们向地图添加的元素多于散列表大小,会发生什么?

时间:2013-06-20 04:51:55

标签: c++ mfc hashmap msdn

AFAIK,在将任何元素添加到地图之前,应调用CMap::InitHashTable方法。换句话说,在将第一个元素添加到CMap对象后,无法更改散列表大小。

同样来自MSDN,To minimize collisions, the size should be roughly 20 percent larger than the largest anticipated data set

所以我的问题是,如果我创建一个具有默认哈希表大小(即17)的CMap对象然后添加(例如)大约40个元素会发生什么?我们在这里假设没有两个密钥会产生类似的哈希值。

1 个答案:

答案 0 :(得分:4)

填充哈希表会导致冲突。碰撞的物品放入列表中,必须进行搜索。一切仍然有效,它只是变慢了一点。如果您的哈希表大小合适且哈希函数适当,那么哈希表中的插入和查找将是恒定时间。在过满的哈希表中,由于必须遍历冲突导致的列表,这些时间会增加。