Pesquisa e inserção eficientes em HashMap no Rust: como evitar dupla hashing?
Olá, colegas! Estou começando a aprender Rust e me deparei com uma tarefa típica: preciso atualizar um valor em HashMap se a chave existir, ou inserir um novo par se a chave não existir. O problema é que faço isso em duas etapas: primeiro verifico a existência da chave com contains_key(), e depois insiro ou altero o valor. Mas, pelo que entendi, isso resulta em dupla hashing — uma vez na verificação e outra na inserção. Parece ineficiente, especialmente para dicionários grandes.
Aqui está meu código atual:
use std::collections::HashMap;
fn update_or_insert(map: &mut HashMap<String, i32>, key: &str, value: i32) {
if map.contains_key(key) {
// Atualiza o valor existente
if let Some(val) = map.get_mut(key) {
*val = value;
}
} else {
// Insere um novo
map.insert(key.to_string(), value);
}
}
Este código funciona, mas me preocupa que contains_ke