我知道在构建无序地图M
时,我会准确插入k
元素。我该如何选择M
的桶数?
我正在考虑使用n = 10*k
在规模和碰撞机会之间进行合理的权衡。
答案 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将是内存使用和因冲突导致的性能下降之间的妥协。
如果您不确定,请将容器设为默认值。如果您感到好奇,请更改默认值并测量(速度和内存使用情况)。