我有以下代码:
std::unordered_map<std::string, std::string> map;
map["k1"] = "v1";
auto& v1 = map["k1"];
map["k2"] = "v2";读完地图后
备注 交换函数不会使容器中的任何迭代器失效,但它们会使标志着交换区域结束的迭代器失效。 对存储在容器中的键或数据的引用和指针仅通过擦除该元素而失效,即使相应的迭代器无效。
看起来在插入新值之后可以安全地使用v1,即使在插入过程中可能会发生重哈希。
我对这句话的解释正确吗?我是否可以在修改映射后使用映射中值的引用/指针(显然,删除值本身将使引用/指针失效)?
发布于 2016-10-05 08:34:44
看起来在插入新值之后可以安全地使用
v1,即使在插入过程中可能会发生重哈希。
是的,std::unordered_map::operator[]不会使引用失效,甚至会发生重散列。
(强调地雷)
如果发生插入并导致重新散列容器,则所有迭代器都将失效。否则迭代器不会受到影响。引用不会使失效。
从标准来看,[unord.req]/9
(强调地雷)
重哈希使迭代器无效,元素之间的更改排序,以及桶元素出现的更改,但不会使指针或对元素的引用失效。
https://stackoverflow.com/questions/39868640
复制相似问题