std :: unordered_map锁定桶数

时间:2015-03-27 08:23:39

标签: c++11 benchmarking unordered-map buckets

我正在尝试在C ++ 11的std :: unordered_map容器上进行性能基准测试。

我想看看容器的加载因子如何影响插入的性能。特别是因为我有兴趣使用哈希表作为基本数据结构来查找大量数字中的对。

据我了解文档,这似乎不可行。我可以使用rehash()设置存储区的数量,但只要超过max_load_factor,就会自动完成此操作。

我可以设置max_load_factor但是根据我的理解,这只会确定何时执行rehash ,它不允许将表置于严重的压力下,这就是我想做。

有没有办法让我硬限制哈希表中的桶数量?

2 个答案:

答案 0 :(得分:2)

max_load_factor设置为INFINITY。这样容器就不应该试图自动rehashload_factor保持在max_load_factor之下。

答案 1 :(得分:0)

不确定这是否是一个好的答案,但它解释了为什么它可能不可能。

如果您有开放式地址,则需要resize,但这是实施细节。您可以使用链接冲突解决方案和链长限制来实现实现,并在违反时调整大小。很多事情都可能发生在幕后。

我的意思是,从用户的角度来看,您无法保证可以安全地修复数量的存储桶,因为某些实现可能会爆炸。即使你允许加载因子很高,偶尔添加表也必须调整大小,因为目标桶已满,否则它将无法接受该元素。即使是相对较低的负载系数,也可能发生这种情况。

当然,某些实现可能会处理任意大的负载因子,但这不是一般属性。

一句话是,一般来说,固定数量的水桶没有多大意义。您无论如何都只能尝试调整大小,这可能是不同负载因素所需要的,具体取决于密钥分配。基本上你不能为每个实现测试任意重负载。