我正在创建一个std::unordered_map
,我将立即着手填充n个键值对 - 我知道n。之后不再添加任何元素 - 我只会执行查找。
因此,我应该将bucket_count
传递给构造函数?
备注:
答案 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
的正确性需要有关碰撞率的数据。