Como posso iterar simultaneamente sobre um Rust HashMap e modificar alguns de seus valores?

Estou tentando o Advent of Code in Rust este ano, como uma maneira de aprender o idioma. Analisei a entrada (desde o dia 7) na seguinte estrutura:

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

Estes são armazenados em umHashMap<String, Process>. Agora quero iterar sobre os valores no mapa e atualizar os valores pai, com base no que encontro no vetor "filhos" do pai.

O que não funciona é

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;
    }
}

Não posso ter uma referência mutável aoHashMap (self.processes) e uma referência não mutável ou duas referências mutáveis.

Então, qual é a maneira mais idiomática de fazer isso no Rust? As duas opções que posso ver são:

Copie os relacionamentos pai / filho em uma nova estrutura de dados temporária em uma passagem e atualize as estruturas do Processo em uma segunda passagem, depois que a referência imutável estiver fora do escopo.Alterar minha estrutura de dados para colocar "pai" em seu próprio HashMap.

Existe uma terceira opção?

questionAnswers(1)

yourAnswerToTheQuestion