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

时间:2016-12-16 10:46:20

标签: c++ unordered-map c++-standard-library buckets

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

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

备注:

2 个答案:

答案 0 :(得分:1)

根据23.5.4.2 [unord.map.cnstr]中的n4296(这是C ++ 14的最终草案) 默认情况下,max_load_factor的{​​{1}}为1.0,因此您只需将bucket_count设置为unordered_map

显然,在增加铲斗数量以提高速度和降低铲斗数量(以及提高最大载荷系数)以改善空间之间存在时空权衡。

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

如果您知道所需的载荷系数范围,那么您只需将铲斗计数设置为n,(并在填充地图之前设置载荷系数)。

答案 1 :(得分:0)

鉴于您有一个负载系数范围,唯一缺少的信息是碰撞率。您只需使用nb_buckets = n / f_2即可确保加载因子小于或等于f_2。确保f_1的正确性需要有关碰撞率的数据。