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个元素会发生什么?我们在这里假设没有两个密钥会产生类似的哈希值。
答案 0 :(得分:4)
填充哈希表会导致冲突。碰撞的物品放入列表中,必须进行搜索。一切仍然有效,它只是变慢了一点。如果您的哈希表大小合适且哈希函数适当,那么哈希表中的插入和查找将是恒定时间。在过满的哈希表中,由于必须遍历冲突导致的列表,这些时间会增加。