У меня 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
?