tengo un mapa que está definido en la memoria global. estoy iterando sobre eso, digamos que estoy en el tercer elemento. ahora estoy llamando a otra función que genera su propio iterador sobre el mismo mapa, sin embargo, podría borrar los elementos 4º o 5º ... en el mapa. mi pregunta es, cuando regreso de esa función y sigo iterando sobre el mapa (le recuerdo que estoy en el tercer elemento), ¿puede mi iterador ser inválido o seguro?iterar sobre un mapa y llamar a una función que borre otros elementos es el mapa
lo siento, no puedo adjuntar el código, es muy, muy largo.
gracias
EDIT: mi pregunta es algo como esto:
map<string,string> mapi;
void er() {
mapi.erase("t");
}
int main() {
mapi.insert(pair<string,string>("w","a"));
mapi.insert(pair<string,string>("e","a"));
mapi.insert(pair<string,string>("r","a"));
mapi.insert(pair<string,string>("t","a"));
mapi.insert(pair<string,string>("A","a"));
mapi.insert(pair<string,string>("u","a"));
mapi.insert(pair<string,string>("C","a"));
map<string,string>::iterator it;
for (it=mapi.begin(); it!=mapi.end(); it++) {
cout << it->first << endl;
if (it->first=="t")
er();
}
}
en este caso borro el mismo elemento - valgrind dice que su error. sin embargo, cuando elimino otros elementos, parece que funciona bien.
Cree un caso de uso simple y pruébelo. – Xeo
@ Xeo: Eso no * garantizaría * que sea seguro y definido. –
he creado algo muy simple. parece funcionar, sin embargo, solo quiero la opinión de los demás, solo para estar seguro –