0

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

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

据我了解文档,这似乎是不可能的。我可以用 a 设置存储桶的数量,rehash()但只要超过它就会自动完成max_load_factor

我可以设置,max_load_factor但据我了解,这仅确定何时执行重新哈希,它不允许将表置于重压下,这是我想要做的。

我有什么办法可以硬限制哈希表中的存储桶数量吗?

4

2 回答 2

3

设置max_load_factorINFINITY。这样,容器永远不会被诱惑做一个自动rehash来保持load_factor下面的max_load_factor

于 2015-03-27T15:45:48.933 回答
0

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

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

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

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

底线是,固定桶的数量通常没有多大意义。无论如何,您只能尝试调整大小,这可能需要不同的负载因子,具体取决于密钥分布。基本上,您不能为每个实现测试任意重负载。

于 2015-03-27T09:38:13.543 回答