HashMap

Hash map (Mapa de hash) padrão com proteção contra ataques HashDoS:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.
  • HashMap nĂŁo estĂĄ definido no prelĂșdio e precisa ser incluĂ­do no escopo.

  • Tente as seguintes linhas de cĂłdigo. A primeira linha verĂĄ se um livro estĂĄ no hash map e, caso nĂŁo esteja, retorna um valor alternativo. A segunda linha irĂĄ inserir o valor alternativo no hash map se o livro nĂŁo for encontrado.

    let pc1 = page_counts .get("Harry Potter and the Sorcerer's Stone") .unwrap_or(&336); let pc2 = page_counts .entry("The Hunger Games".to_string()) .or_insert(374);
  • Ao contrĂĄrio de vec!, infelizmente nĂŁo existe uma macro hashmap! padrĂŁo.

    • Entretanto, desde o Rust 1.56, o HashMap implementa From<[(K, V); N]>, o que nos permite inicializar facilmente um hash map a partir de uma matriz literal:

      let page_counts = HashMap::from([ ("Harry Potter and the Sorcerer's Stone".to_string(), 336), ("The Hunger Games".to_string(), 374), ]);
  • Alternativamente, o HashMap pode ser construĂ­do a partir de qualquer Iterator que produz tuplas de chave-valor.

  • Estamos mostrando HashMap<String, i32>, e evite usar &str como chave para facilitar os exemplos. É claro que o uso de referĂȘncias em coleçÔes pode ser feito, mas isto pode levar a complicaçÔes com o verificador de emprĂ©stimos.

    • Tente remover to_string() do exemplo acima e veja se ele ainda compila. Onde vocĂȘ acha que podemos ter problemas?
  • Este tipo tem vĂĄrios tipos de retorno “especĂ­ficos do mĂ©todo”, como std::collections::hash_map::Keys. Esses tipos geralmente aparecem em pesquisas nos documentos do Rust. Mostre aos alunos os documentos para este tipo e o link Ăștil de volta ao mĂ©todo keys.