use std::collections::HashMap; fn main() { let mut scores = HashMap::new(); scores.insert(String::from("Blue"), 10); scores.insert(String::from("Yellow"), 50); let team_name = String::from("Blue"); let score = scores.get(&team_name).copied().unwrap_or(0); for (key, value) in &scores { println!("{key}: {value}"); } // hash maps and ownership // Copy trait implementers copy the values into the hash map. // Owned values like String, values get moved let field_name = String::from("Favorite color"); let field_value = String::from("Blue"); let mut map = HashMap::new(); map.insert(field_name, field_value); // Below is invalid use after move // println!("{field_name}"); // Updating a hash map // overwriting let mut scores = HashMap::new(); scores.insert(String::from("Blue"), 10); scores.insert(String::from("Blue"), 20); println!("{scores:?}"); // adding a key and value only if a key isn't present let mut scores = HashMap::new(); scores.insert(String::from("Blue"), 10); scores.entry(String::from("Yellow")).or_insert(50); scores.entry(String::from("Blue")).or_insert(50); println!("{scores:?}"); // updating a value based on the old value let text = "hello world wonderful world"; let mut map = HashMap::new(); for word in text.split_whitespace() { let count = map.entry(word).or_insert(0); *count += 1; } println!("{map:?}"); // Custom hashing functions // // Why: Default one is secure but kinda slow // Can use a different hashing function if too slow // Talks about how in chapter 10. }