unordered_map的副本是否具有完全相同的存储桶

时间:2018-07-30 11:18:21

标签: c++ boost unordered-map

据我了解,unordered_map中的存储桶数量在填充unordered_map时意外增加。

如果我执行unordered_map(到另一个unordered_map的复制),可以保证会有完全相同的对。但是它们会在同一个桶中吗?桶的数量会一样吗?

我不知道存储桶的创建机制,也没有找到简短的解释,说明它必须如何实现。但是,如果存储桶的数量可能取决于插入,分配等的顺序,那么在复制后,我们可能会获得不同数量的存储桶或其中的存储空间不同(即使项目相同)。是真的吗对于boost的实施还是gcc的标准实施?

1 个答案:

答案 0 :(得分:3)

在复制unordered_map时,指定要复制的最大负载因子而不是“当前”负载因子。

用于复制构造和复制分配的条目都包括以下内容

  

除了表64的要求之外,还复制哈希函数,   谓词和最大负载因子。

[unord.req]

通常,这意味着可能会有不同数量的存储桶,因此副本中的元素在存储桶中的分布也不同。