¿Cómo puedo iterar simultáneamente sobre un Rust HashMap y modificar algunos de sus valores?

Estoy intentando Advent of Code in Rust este año, como una forma de aprender el idioma. Analicé la entrada (desde el día 7) en la siguiente estructura:

struct Process {
    name: String,
    weight: u32,
    children: Vec<String>,
    parent: Option<String>
}

Estos se almacenan en unHashMap<String, Process>. Ahora quiero iterar sobre los valores en el mapa y actualizar los valores principales, según lo que encuentre en el vector "secundario" de los principales.

Lo que no funciona es

for p in self.processes.values() {
    for child_name in p.children {
        let mut child = self.processes.get_mut(child_name).expect("Child not found.");
        child.parent = p.name;
    }
}

No puedo tener una referencia mutable alHashMap (self.processes) y una referencia no mutable, o dos referencias mutables.

Entonces, ¿cuál es la forma más idiomática de lograr esto en Rust? Las dos opciones que puedo ver son:

Copie las relaciones padre / hijo en una nueva estructura de datos temporal en una pasada, y luego actualice las estructuras del Proceso en una segunda pasada, después de que la referencia inmutable esté fuera del alcance.Cambiar mi estructura de datos para poner "padre" en su propio HashMap.

¿Hay una tercera opción?

Respuestas a la pregunta(1)

Su respuesta a la pregunta