Avatar ·

Búsqueda e inserción eficientes en HashMap en Rust: ¿cómo evitar el doble hash?

¡Hola, colegas! Estoy empezando a aprender Rust y me encontré con una tarea típica: necesito actualizar un valor en HashMap si la clave existe, o insertar un nuevo par si la clave no existe. El problema es que lo hago en dos pasos: primero verifico la existencia de la clave con contains_key(), y luego inserto o modifico el valor. Pero, según entiendo, esto provoca un doble hash: una vez al verificar y otra al insertar. Parece ineficiente, especialmente para diccionarios grandes.

Aquí está mi código actual:

use std::collections::HashMap;

fn update_or_insert(map: &mut HashMap<String, i32>, key: &str, value: i32) {
    if map.contains_key(key) {
        // Actualizamos el valor existente
        if let Some(val) = map.get_mut(key) {
            *val = value;
        }
    } else {
        // Insertamos uno nuevo
        map.insert(key.to_string(), value);
    }
}

Este código funciona, pero me preocupa que contains_ke