我正在寻找有关reserve
std::unordered_map
方法行为的说明。让我们与std::vector
的情况形成对比。在std::vector::reserve
上引用cppreference,
将向量的容量增加到大于或等于
new_cap
的值。如果new_cap
大于当前capacity()
,则会分配新存储空间,否则该方法不会执行任何操作。
但是,unordered_map的相应页面只是说
将桶数设置为容纳至少count个元素而不超过最大负载因子所需的数量,并重新对容器进行重新分区,即考虑到桶的总数已更改,将元素放入适当的桶中。有效地拨打
rehash(std::ceil(count / max_load_factor()))
。
我想知道
std::unordered_map::reserve
作出任何类似的保证;如果没有是否可以进行检查以确保不执行不必要的,可能代价高昂的重组?例如,如果我的地图目前的尺寸为count
,并且我将其尺寸增加到new_count
,那么我是否应该只调用预留
std::ceil(new_count / max_load_factor()) > std::ceil(count / max_load_factor())
答案 0 :(得分:1)
标准是否做出任何类似的保证[
reserve
如果满足rehash
(它调用的)的后置条件,则不应该做任何事情:bucket_count() >= size() / max_load_factor()
和bucket_count() >= n
其中{ {1}}是[{1}})]关于n
的参数?
不,不。
是否可以进行检查以确保不会执行不必要的,可能代价高昂的重组?
您可以在[...]中检查我编辑到上述问题中的后置条件,但是没有内置函数可以为您完成。
相关标准:§23.2.5/表103 [unord.req](n3337)