У меня есть std::vector
с элементами некоторого класса ClassA
. Кроме того, я хочу создать индекс с помощью std::map<key,ClassA*>
, который отображает некоторое значение ключа в указатели на элементы, содержащиеся в векторе.
Есть ли гарантия, что эти указатели остаются действительными (и указывают на один и тот же объект), когда элементы добавляются в конце вектора (не вставлены). I.e, будет ли правильный код:
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
?