Puedes recorrer la lista con un iterador hasta encontrar el Persona que buscas, la desreferencia del iterador sobre ese elemento te sirve como acceso al elemento mismo. En tu ejemplo tienes una lista de Persona, cuando la tienes llena la recorres:
Código C++:
Ver originallist <Persona>::iterator itr_contacto;
for(itr_contacto = contactos.begin(); itr_contacto != contactos.end(); itr_contacto++) {
if((*itr_contacto).id == 123) {
(*itr_contacto).nombre = "Otro nombre";
}
}
La desreferencia del iterador actua como si estuvieses trabajando directamente con el elemento que enviaste a la lista. Si p.ej. tuvieras una lista de punteros, la desreferencia del iterador actuaría igual que si trabajases sobre el puntero.
Saludos
vosk