【发布时间】:2016-10-05 08:11:45
【问题描述】:
我有以下代码:
std::unordered_map<std::string, std::string> map;
map["k1"] = "v1";
auto& v1 = map["k1"];
map["k2"] = "v2";
看完http://en.cppreference.com/w/cpp/container/unordered_map
注意事项
交换函数不会使容器内的任何迭代器失效,但它们会使标记交换区域结束的迭代器失效。
对存储在容器中的键或数据的引用和指针只有通过擦除该元素才会失效,即使相应的迭代器失效也是如此。
看起来v1 在插入新值后可以安全使用,即使在插入过程中可能会发生重新散列。
我对这句话的理解正确吗?修改地图后,我可以使用地图中值的引用/指针吗(显然删除值本身会使引用/指针无效)?
【问题讨论】:
-
是的,你是对的。也见here。
标签: c++ c++11 language-lawyer unordered-map