我试图在C++11的std::unordered_map容器上进行性能测试。
我想看看容器的负载系数如何影响插入的性能。特别是,因为我对使用哈希表作为基本数据结构来查找一组庞大的数字中的对很感兴趣。
据我所知,这似乎是不可能的。我可以用rehash()来设置桶的数量,但是这是在超过max_load_factor时自动完成的。
我可以设置max_load_factor,但据我理解,这只能决定何时执行重散,它不允许将表置于很大的压力下,这正是我想要做的。
我有没有办法硬限制哈希表中桶的数量?
发布于 2015-03-27 15:45:48
将max_load_factor设置为INFINITY。这样,容器就不会被诱惑去执行一个自动的rehash来将load_factor保持在max_load_factor以下。
发布于 2015-03-27 09:38:13
不确定这是否是一个好的答案,但这是一个解释为什么这可能是不可能的。
如果您有开放的寻址,您需要resize,但这是实现的细节。您可以使用链式冲突解析和对链长度的限制来实现一个实现,并在被违反时调整其大小。许多事情都可能发生在引擎盖下。
我的意思是,从用户的角度来看,不能保证您能够安全地修复桶数,因为一些实现可能会崩溃。即使您允许负载因子很高,偶尔加法表也必须调整大小,因为目标桶已经满了,否则它将无法接受元素。即使在相对较低的负载因素下,也可能发生这种情况。
当然,有些实现可能处理任意大的负载因素,但这不是一个通用属性。
底线是,固定桶的数量在一般情况下没有多大意义。您将只能尝试到调整大小的点,这可能需要为不同的负载因素,取决于密钥分配。基本上,您不能为每个实现测试任意重的负载。
https://stackoverflow.com/questions/29296164
复制相似问题