C ++ unordered-map很多桶

时间:2015-01-18 19:22:55

标签: c++ c++11 hash unordered-map

我知道在构建无序地图M时,我会准确插入k元素。我该如何选择M的桶数?

我正在考虑使用n = 10*k在规模和碰撞机会之间进行合理的权衡。

1 个答案:

答案 0 :(得分:6)

使用k == n并不是一个糟糕的选择。无序容器的默认max_load_factor为1.0。这意味着容器不会重新分配更多桶,直到k > n。如果您需要其他max_load_factor,请构建您的容器,设置max_load_factor,然后调用reserve(k),这将为您的当前{{k元素分配足够的存储分区1}}。

选择好的max_load_factor取决于所使用的散列数据结构的类型。 Here is a good description两种主要类型:链接和开放寻址。此描述包含nice chart,其中显示了这两种基本哈希数据结构设计的平均冲突数与负载因子。

std :: unordered容器被约束为使用链接设计,因此您可以通过加载因子1来了解可能出现的冲突。

委员会的动力是让其容器能够在大多数情况下开箱即用,无需进行大量调整。该委员会认为默认max_load_factor为1将是内存使用和因冲突导致的性能下降之间的妥协。

如果您不确定,请将容器设为默认值。如果您感到好奇,请更改默认值并测量(速度和内存使用情况)。