私はstd::vector
いくつかのクラスの要素を持っていClassA
ます。std::map<key,ClassA*>
さらに、いくつかのキー値をベクトルに含まれる要素へのポインターにマップするを使用してインデックスを作成したいと思います。
要素がベクトルの最後に追加されたとき(挿入されていないとき)に、これらのポインターが有効なままである(そして同じオブジェクトを指す)という保証はありますか?つまり、次のコードは正しいでしょうか。
std::vector<ClassA> storage;
std::map<int, ClassA*> map;
for (int i=0; i<10000; ++i) {
storage.push_back(ClassA());
map.insert(std::make_pair(storage.back().getKey(), &(storage.back()));
}
// map contains only valid pointers to the 'correct' elements of storage
std::list
代わりに使用した場合、状況はどうstd::vector
ですか?