2016-02-19 16 views
1

一旦一个关键值对被插入到一个unordered_map中,并且让我们说iter指向这个对,那么在这个对的整个生命周期中iter-> first会在unordered_map中出现吗?unordered_map :: iterator->第一次改变次序插入和删除的地址吗?

键主要是长字符串,所以我想将其迭代器 - >第一个地址存储在其他引用位置,而不是字符串本身。

+0

Hello PreferenceBean,我通过你在这里发布的链接。我看到相关部分“未排序的关联容器:unordered_ [multi] {set,map}:所有迭代器在发生重新刷新时失效,但引用不受影响[23.2.5/8]。”这回答我的问题。请建议是否需要在本文后面的任何进一步行动w.r.t。 – vrk001

回答

1

这样会很好,除非你直接擦除元素。

对于std::unordered_map::insert

如果由于插入发生重散列,所有迭代器无效。否则迭代器不受影响。 参考文献不会失效。仅当新的元素数量大于max_load_factor()*bucket_count()时才会发生重新散列。

对于std::unordered_map::erase

引用和迭代器擦除元件失效。 其他迭代器和引用不会失效

+0

是的,我已经知道重新哈希导致迭代器失效,但键也重新分配?是不是分配一个新的迭代器指向内存中的同一个键实例,它将以迭代器 - >第一次返回? – vrk001

+0

@ vrk001我的不好。我误解了你的问题。我修改了我的答案。 – songyuanyao

相关问题