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 に答える