Tengo un std::vector
con elementos de alguna clase ClassA
. Además, quiero crear un índice usando un std::map<key,ClassA*>
que mapea algunos valores clave para los punteros a los elementos contenidos en el vector.Punteros a elementos de std :: vector y std :: list
¿Hay alguna garantía de que estos punteros siguen siendo válidos (y apuntan al mismo objeto) cuando los elementos se añaden al final del vector (no insertada). Es decir, sería el siguiente código sea correcto:
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
¿Cómo es la situación, si uso std::list
en lugar de std::vector
?
¿Cuál es el propósito del vector aquí? ¿Necesitas recordar el orden en que fueron creados? Puede usar el mapa y vecor en su lugar. Iteradores/Punteros/Las referencias a los elementos de un mapa permanecen válidos por más tiempo. Vea las garantías de su referencia de biblioteca estándar favorita. –
sellibitze