pub enum EntryRef<'a, 'b, K, Q: ?Sized, V, S, A = Global>where
A: Allocator,{
Occupied(OccupiedEntry<'a, K, V, S, A>),
Vacant(VacantEntryRef<'a, 'b, K, Q, V, S, A>),
}Expand description
A view into a single entry in a map, which may either be vacant or occupied, with any borrowed form of the map’s key type.
This enum is constructed from the entry_ref method on HashMap.
[Hash] and [Eq] on the borrowed form of the map’s key type must match those
for the key type. It also require that key may be constructed from the borrowed
form through the [ToOwned] trait.
§Examples
use hashbrown::hash_map::{EntryRef, HashMap, OccupiedEntry};
let mut map = HashMap::new();
map.extend([("a".to_owned(), 10), ("b".into(), 20), ("c".into(), 30)]);
assert_eq!(map.len(), 3);
// Existing key (insert)
let key = String::from("a");
let entry: EntryRef<_, _, _, _> = map.entry_ref(&key);
let _raw_o: OccupiedEntry<_, _, _, _> = entry.insert(1);
assert_eq!(map.len(), 3);
// Nonexistent key (insert)
map.entry_ref("d").insert(4);
// Existing key (or_insert)
let v = map.entry_ref("b").or_insert(2);
assert_eq!(std::mem::replace(v, 2), 20);
// Nonexistent key (or_insert)
map.entry_ref("e").or_insert(5);
// Existing key (or_insert_with)
let v = map.entry_ref("c").or_insert_with(|| 3);
assert_eq!(std::mem::replace(v, 3), 30);
// Nonexistent key (or_insert_with)
map.entry_ref("f").or_insert_with(|| 6);
println!("Our HashMap: {:?}", map);
for (key, value) in ["a", "b", "c", "d", "e", "f"].into_iter().zip(1..=6) {
assert_eq!(map[key], value)
}
assert_eq!(map.len(), 6);Variants§
Occupied(OccupiedEntry<'a, K, V, S, A>)
An occupied entry.
§Examples
use hashbrown::hash_map::{EntryRef, HashMap};
let mut map: HashMap<_, _> = [("a".to_owned(), 100), ("b".into(), 200)].into();
match map.entry_ref("a") {
EntryRef::Vacant(_) => unreachable!(),
EntryRef::Occupied(_) => { }
}Vacant(VacantEntryRef<'a, 'b, K, Q, V, S, A>)
A vacant entry.
§Examples
use hashbrown::hash_map::{EntryRef, HashMap};
let mut map: HashMap<String, i32> = HashMap::new();
match map.entry_ref("a") {
EntryRef::Occupied(_) => unreachable!(),
EntryRef::Vacant(_) => { }
}Implementations§
Source§impl<'a, 'b, K, Q: ?Sized, V, S, A: Allocator> EntryRef<'a, 'b, K, Q, V, S, A>
impl<'a, 'b, K, Q: ?Sized, V, S, A: Allocator> EntryRef<'a, 'b, K, Q, V, S, A>
Sourcepub fn insert(self, value: V) -> OccupiedEntry<'a, K, V, S, A>where
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn insert(self, value: V) -> OccupiedEntry<'a, K, V, S, A>where
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Sets the value of the entry, and returns an OccupiedEntry.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, u32> = HashMap::new();
let entry = map.entry_ref("horseyland").insert(37);
assert_eq!(entry.key(), "horseyland");Sourcepub fn or_insert(self, default: V) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn or_insert(self, default: V) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Ensures a value is in the entry by inserting the default if empty, and returns a mutable reference to the value in the entry.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, u32> = HashMap::new();
// nonexistent key
map.entry_ref("poneyland").or_insert(3);
assert_eq!(map["poneyland"], 3);
// existing key
*map.entry_ref("poneyland").or_insert(10) *= 2;
assert_eq!(map["poneyland"], 6);Sourcepub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Ensures a value is in the entry by inserting the result of the default function if empty, and returns a mutable reference to the value in the entry.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, u32> = HashMap::new();
// nonexistent key
map.entry_ref("poneyland").or_insert_with(|| 3);
assert_eq!(map["poneyland"], 3);
// existing key
*map.entry_ref("poneyland").or_insert_with(|| 10) *= 2;
assert_eq!(map["poneyland"], 6);Sourcepub fn or_insert_with_key<F: FnOnce(&Q) -> V>(self, default: F) -> &'a mut Vwhere
K: Hash + Borrow<Q>,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn or_insert_with_key<F: FnOnce(&Q) -> V>(self, default: F) -> &'a mut Vwhere
K: Hash + Borrow<Q>,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Ensures a value is in the entry by inserting, if empty, the result of the default function. This method allows for generating key-derived values for insertion by providing the default function an access to the borrower form of the key.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, usize> = HashMap::new();
// nonexistent key
map.entry_ref("poneyland").or_insert_with_key(|key| key.chars().count());
assert_eq!(map["poneyland"], 9);
// existing key
*map.entry_ref("poneyland").or_insert_with_key(|key| key.chars().count() * 10) *= 2;
assert_eq!(map["poneyland"], 18);Sourcepub fn key(&self) -> &Qwhere
K: Borrow<Q>,
pub fn key(&self) -> &Qwhere
K: Borrow<Q>,
Returns a reference to this entry’s key.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, u32> = HashMap::new();
map.entry_ref("poneyland").or_insert(3);
// existing key
assert_eq!(map.entry_ref("poneyland").key(), "poneyland");
// nonexistent key
assert_eq!(map.entry_ref("horseland").key(), "horseland");Sourcepub fn and_modify<F>(self, f: F) -> Selfwhere
F: FnOnce(&mut V),
pub fn and_modify<F>(self, f: F) -> Selfwhere
F: FnOnce(&mut V),
Provides in-place mutable access to an occupied entry before any potential inserts into the map.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, u32> = HashMap::new();
map.entry_ref("poneyland")
.and_modify(|e| { *e += 1 })
.or_insert(42);
assert_eq!(map["poneyland"], 42);
map.entry_ref("poneyland")
.and_modify(|e| { *e += 1 })
.or_insert(42);
assert_eq!(map["poneyland"], 43);Source§impl<'a, 'b, K, Q: ?Sized, V: Default, S, A: Allocator> EntryRef<'a, 'b, K, Q, V, S, A>
impl<'a, 'b, K, Q: ?Sized, V: Default, S, A: Allocator> EntryRef<'a, 'b, K, Q, V, S, A>
Sourcepub fn or_default(self) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn or_default(self) -> &'a mut Vwhere
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Ensures a value is in the entry by inserting the default value if empty, and returns a mutable reference to the value in the entry.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, Option<u32>> = HashMap::new();
// nonexistent key
map.entry_ref("poneyland").or_default();
assert_eq!(map["poneyland"], None);
map.insert("horseland".to_string(), Some(3));
// existing key
assert_eq!(map.entry_ref("horseland").or_default(), &mut Some(3));Sourcepub fn or_default_entry(self) -> OccupiedEntry<'a, K, V, S, A>where
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
pub fn or_default_entry(self) -> OccupiedEntry<'a, K, V, S, A>where
K: Hash,
Q: ToOwned<Owned = K>,
S: BuildHasher,
Ensures a value is in the entry by inserting the default value if empty,
and returns an OccupiedEntry.
§Examples
use hashbrown::HashMap;
let mut map: HashMap<String, Option<u32>> = HashMap::new();
// nonexistent key
let entry = map.entry_ref("poneyland").or_default_entry();
assert_eq!(entry.key(), &"poneyland");
assert_eq!(entry.get(), &None);
// existing key
map.insert("horseland".to_string(), Some(3));
let entry = map.entry_ref("horseland").or_default_entry();
assert_eq!(entry.key(), &"horseland");
assert_eq!(entry.get(), &Some(3));