简介
我想要澄清reserve
方法std::unordered_map
的行为。让我们来对比一下std::vector
的情况。引用优先选择 on std::vector::reserve
的话,
将向量的容量提高到大于或等于
new_cap
的值。如果new_cap
大于当前capacity()
,则分配新存储,否则该方法什么也不做。
然而,地图的相应页面只表示
将桶数设置为容纳至少不超过最大负载因子的元素所需的数量,并重新散列容器,即考虑到总桶数的变化,将元素放入适当的桶中。有效地调用了
rehash(std::ceil(count / max_load_factor()))
。
我的问题
我想知道
std::unordered_map::reserve
作了类似的保证;如果没有count
,并且我要将它的大小增加到new_count
,那么我应该只在
ceil(new_count/ max_load_factor()) > std::ceil(count / max_load_factor())
?发布于 2017-07-14 15:11:41
如果
reserve
(它所调用的)的后置条件满足:bucket_count() >= size() / max_load_factor()
和bucket_count() >= n
(n
是reserve
的论点)关于std::unordered_map::reserve
的论点,那么标准是否做出了类似的保证呢?
不,不需要。
是否可以进行检查以确保不执行不必要的、可能代价高昂的重新哈希操作?
你可以检查我在上面的问题中编辑的后置条件.但是没有内置的功能来为你做这件事。
相关标准:§23.2.5/表103 unord.req
https://stackoverflow.com/questions/45105772
复制相似问题