1

嗨,我想知道如果 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}));
.....

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

4

1 回答 1

3

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

重新散列使迭代器无效、更改元素之间的顺序以及更改哪些桶元素出现在其中,但不会使指针或对元素的引用无效。

因此,迭代器将在重新散列时失效,但您可以改为引用元素。

于 2013-06-21T18:24:39.180 回答