unordered_map 的副本是否具有完全相同的存储桶
Does copy of unordered_map will have exactly same buckets
据我了解,unordered_map
中的桶数量在填充 unordered_map
时意外增加。
如果我执行 unordered_map
的复制(到另一个 unordered_map
),可以保证会有完全相同的对。但他们会在同一个桶里吗?桶的数量会相同吗?
我不知道 bucket 的创建机制,也没有找到简短的解释,它必须如何在标准中实现。但是如果桶的数量可能依赖于插入、分配等的顺序,那么在复制之后我们可能会得到不同数量的桶,或者在那里有不同的分布(即使项目是相同的)。是真的吗?对于boost的实现和gcc的标准实现?
在复制 unordered_map
时指定复制最大加载因子,而不是 "current" 加载因子。
拷贝构造和拷贝赋值的入口都包括以下内容
In addition to the requirements of Table 64, copies the hash function,
predicate, and maximum load factor.
一般来说,这意味着桶的数量可能不同,因此副本中的元素在桶中的分布也不同。
据我了解,unordered_map
中的桶数量在填充 unordered_map
时意外增加。
如果我执行 unordered_map
的复制(到另一个 unordered_map
),可以保证会有完全相同的对。但他们会在同一个桶里吗?桶的数量会相同吗?
我不知道 bucket 的创建机制,也没有找到简短的解释,它必须如何在标准中实现。但是如果桶的数量可能依赖于插入、分配等的顺序,那么在复制之后我们可能会得到不同数量的桶,或者在那里有不同的分布(即使项目是相同的)。是真的吗?对于boost的实现和gcc的标准实现?
在复制 unordered_map
时指定复制最大加载因子,而不是 "current" 加载因子。
拷贝构造和拷贝赋值的入口都包括以下内容
In addition to the requirements of Table 64, copies the hash function, predicate, and maximum load factor.
一般来说,这意味着桶的数量可能不同,因此副本中的元素在桶中的分布也不同。