将无序映射迭代器更改

will unordered_map iterator change?

本文关键字:迭代器 映射 无序      更新时间:2023-10-16

嗨,我想知道如果无序映射的大小改变,然后重新哈希,迭代器是否会改变?我正试图创建一个迭代器指针结构,将无序映射中的几个元素放在一起。

#include<string>
#include<tr1/unordered_map>
struct linker
{
    unordered_map<Key,T>::iterator it;
    unordered_map<Key,T>::iterator it1;
    unordered_map<Key,T>::iterator it2;
};
unordered_map<string,int> map({{"aaa",1},{"bbb",2},{"ccc",3},{"ddd",4}});
linker node1 = new linker;
node1.it = map.find("aaa");
node1.it1 = &map.find("ccc");
node1.it2 = &map.find("ddd");
map.insert(make_pair({"sss",23}));
.....

在插入太多元素之后,迭代器指针是否仍然可用,并在映射大小更改之前指向同一个元素/键?

C++11 23.2.5/8"无序关联容器":

Rehashing会使迭代器失效,更改元素之间的顺序,以及更改元素出现在哪个bucket中,但不会使指向元素的指针或引用失效。

因此,迭代器在rehash上会无效,但您可以使用对元素的引用。