C++ 无序映射的地址::迭代器->;子序列插入时的首次变化&;删除?

C++ 无序映射的地址::迭代器->;子序列插入时的首次变化&;删除?,c++,iterator,unordered-map,C++,Iterator,Unordered Map,一旦一个键值对被插入到一个无序的_图中,假设iter指向这一对,&iter->首先会在无序的_图中存在的这一对的整个生命周期内保持不变吗 键大部分是长字符串,因此我希望将它们的迭代器->第一个地址存储在其他引用位置,而不是字符串本身。这很好,除非直接删除元素 因为 如果由于插入而发生重新灰化,则所有迭代器都将无效。否则迭代器不受影响引用不会失效。仅当新的元素数大于max\u load\u factor()*bucket\u count()时,才会进行重新灰化 因为 对已删除元素的引用和迭代器无效

一旦一个键值对被插入到一个无序的_图中,假设iter指向这一对,&iter->首先会在无序的_图中存在的这一对的整个生命周期内保持不变吗


键大部分是长字符串,因此我希望将它们的迭代器->第一个地址存储在其他引用位置,而不是字符串本身。

这很好,除非直接删除元素

因为

如果由于插入而发生重新灰化,则所有迭代器都将无效。否则迭代器不受影响引用不会失效。仅当新的元素数大于
max\u load\u factor()*bucket\u count()
时,才会进行重新灰化

因为

对已删除元素的引用和迭代器无效其他迭代器和引用不会失效


是的,我知道重新灰化会导致迭代器失效,但密钥也会重新分配吗?是否分配了一个新的迭代器,指向内存中的同一个键实例,该键实例再次返回为iterator->first?@vrk001 My bad。我误解了你的问题。我修改了我的答案。你好,PreferenceBean,我浏览了你在这里发布的链接。我确实看到了相关的部分“未排序的关联容器:无序的u[multi]{set,map}:当进行重新排序时,所有迭代器都无效,但引用未受影响[23.2.5/8]”。这确实回答了我的问题。请建议我方是否需要对此帖子采取进一步行动。