如果我知道地图键的预期数量,我应该使用什么 bucket_count 值?

What bucket_count value should I use if I know the intended number of map keys?

我正在创建一个 std::unordered_map,我将立即着手填充 n 个键值对 - 我知道 n。之后将不再添加元素 - 我将只执行查找。

因此,我应该将什么作为 bucket_count 传递给构造函数?

备注:

根据n4296 in 23.5.4.2 [unord.map.cnstr](这是C++14的最终稿) 默认情况下 unordered_mapmax_load_factor 是 1.0,因此您可以将 bucket_count 设置为 n.

显然,在增加桶数以提高速度和减少桶数(并提高最大负载系数)以提高 space 之间存在 space 时间权衡 space。

我要么不担心,要么如果它是 地图,请将存储桶计数设置为 n。然后当分析显示你有问题时,你可以担心优化。

如果您知道所需的负载系数范围,则只需将桶数设置为 std::ceil(n/(std::max(f_1,f_2))(并在填充地图之前设置负载系数)。

鉴于您的负载系数有一个范围,唯一缺少的信息是碰撞率。您可以简单地使用 nb_buckets = n / f_2,并且您一定会得到小于或等于 f_2 的负载因子。确保 f_1 的正确性需要有关冲突率的数据。