Como atualizar ou inserir em um Vec?

Estou escrevendo uma estrutura de dados no Rust. Contém umVec de pares de valores-chave. Ao inserir na estrutura, preciso encontrar uma chave correspondente e atualizar a chave e o valor (que na verdade é um ponteiro filho). O código se parece um pouco com isso, ondepivots é umref mut paraVec<Pivot> ePivot é apenas uma estrutura com dois campos:

match pivots.iter_mut().find(|ref p| key <= p.min_key) { // first mutable borrow
    Some(ref mut pivot) => {
        // If there is one, insert into it and update the pivot key
        pivot.min_key = key;
        pivot.child.insert(key, value) // recursive call
    },
    // o/w, insert a new leaf at the end
    None => pivots.push(Pivot /* ... */) // second mutable borrow
}

Mas há um problema. Mesmo que eu não use o iterador mutável no segundo braço domatch, o verificador empresta que "eu não posso emprestar*pivots mutável mais de uma vez de cada vez ".

Isso faz todo o sentido para mim, porque o primeiro empréstimo ainda está no escopo, mesmo que não seja usado nesse caso domatch. É um pouco inconveniente: um verificador mais inteligente certamente poderia dizer que os empréstimos não se sobrepõem. Eu vi alguém online aconselhando o retorno antecipado para evitar o problema, assim:

match pivots.iter_mut().find(|ref p| key <= p.min_key) {
    Some(ref mut pivot) => {
        pivot.min_key = key;
        pivot.child.insert(key, value);
        return
    },
    None => ()
};
pivots.push(Pivot /* ... */)

mas isso parece difícil de entender, especialmente quando significa quebrar esse código em sua própria função para permitir que oreturn. Existe uma maneira mais idiomática de executar a operação de atualização ou inserção?

questionAnswers(2)

yourAnswerToTheQuestion