首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::unordered_map指针/引用失效

问std::unordered_map指针/引用失效
EN

Stack Overflow用户
提问于 2016-10-05 08:11:45
回答 1查看 7.3K关注 0票数 20

我有以下代码:

代码语言:javascript
复制
std::unordered_map<std::string, std::string> map;

map["k1"] = "v1";
auto& v1 = map["k1"];
map["k2"] = "v2";

读完地图后

备注 交换函数不会使容器中的任何迭代器失效,但它们会使标志着交换区域结束的迭代器失效。 对存储在容器中的键或数据的引用和指针仅通过擦除该元素而失效,即使相应的迭代器无效。

看起来在插入新值之后可以安全地使用v1,即使在插入过程中可能会发生重哈希。

我对这句话的解释正确吗?我是否可以在修改映射后使用映射中值的引用/指针(显然,删除值本身将使引用/指针失效)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-05 08:34:44

看起来在插入新值之后可以安全地使用v1,即使在插入过程中可能会发生重哈希。

是的,std::unordered_map::operator[]不会使引用失效,甚至会发生重散列。

(强调地雷)

如果发生插入并导致重新散列容器,则所有迭代器都将失效。否则迭代器不会受到影响。引用不会使失效。

从标准来看,[unord.req]/9

(强调地雷)

重哈希使迭代器无效,元素之间的更改排序,以及桶元素出现的更改,但不会使指针或对元素的引用失效。

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

https://stackoverflow.com/questions/39868640

复制
相关文章

相似问题

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