嗨,我想知道如果unordered_map的大小发生变化然后重新加入,迭代器是否会改变?我正在尝试创建一个迭代器指针结构,将unordered_map中的几个元素组合在一起。
#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}));
.....
插入太多元素后,迭代器指针是否仍然可用并在映射大小更改之前指向相同的元素/键?
答案 0 :(得分:3)
C ++ 11 23.2.5 / 8“无序关联容器”:
Rehashing使迭代器无效,元素之间的顺序更改以及更改桶元素出现的更改,但不会使指针或对元素的引用无效。
因此迭代器在rehash上会失效,但你可以改为引用元素。