首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对std::unordered_map::reserve的不必要或冗余调用的行为

对std::unordered_map::reserve的不必要或冗余调用的行为
EN

Stack Overflow用户
提问于 2017-07-14 14:43:05
回答 1查看 148关注 0票数 3

简介

我想要澄清reserve方法std::unordered_map的行为。让我们来对比一下std::vector的情况。引用优先选择 on std::vector::reserve的话,

将向量的容量提高到大于或等于new_cap的值。如果new_cap大于当前capacity(),则分配新存储,否则该方法什么也不做。

然而,地图的相应页面只表示

将桶数设置为容纳至少不超过最大负载因子的元素所需的数量,并重新散列容器,即考虑到总桶数的变化,将元素放入适当的桶中。有效地调用了rehash(std::ceil(count / max_load_factor()))

我的问题

我想知道

  1. 该标准是否对std::unordered_map::reserve作了类似的保证;如果没有
  2. 是否可以进行检查以确保不执行不必要的、可能代价高昂的重新哈希操作?例如,如果我的地图当前的大小是count,并且我要将它的大小增加到new_count,那么我应该只在 ceil(new_count/ max_load_factor()) > std::ceil(count / max_load_factor()) ?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 15:11:41

如果reserve (它所调用的)的后置条件满足:bucket_count() >= size() / max_load_factor()bucket_count() >= n ( nreserve的论点)关于std::unordered_map::reserve的论点,那么标准是否做出了类似的保证呢?

不,不需要。

是否可以进行检查以确保不执行不必要的、可能代价高昂的重新哈希操作?

你可以检查我在上面的问题中编辑的后置条件.但是没有内置的功能来为你做这件事。

相关标准:§23.2.5/表103 unord.req

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45105772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档