Skip to main content

EntryRef

Enum EntryRef 

Source
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>

Source

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");
Source

pub fn or_insert(self, default: V) -> &'a mut V
where 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);
Source

pub fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V
where 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);
Source

pub fn or_insert_with_key<F: FnOnce(&Q) -> V>(self, default: F) -> &'a mut V
where 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);
Source

pub fn key(&self) -> &Q
where 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");
Source

pub fn and_modify<F>(self, f: F) -> Self
where 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

pub fn into_map(self) -> &'a mut HashMap<K, V, S, A>

Converts the EntryRef into a mutable reference to the underlying map.

Source§

impl<'a, 'b, K, Q: ?Sized, V: Default, S, A: Allocator> EntryRef<'a, 'b, K, Q, V, S, A>

Source

pub fn or_default(self) -> &'a mut V
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 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));
Source

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));

Trait Implementations§

Source§

impl<K, Q, V, S, A> Debug for EntryRef<'_, '_, K, Q, V, S, A>
where K: Debug + Borrow<Q>, Q: Debug + ?Sized, V: Debug, A: Allocator,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, 'b, K, Q, V, S, A = Global> !UnwindSafe for EntryRef<'a, 'b, K, Q, V, S, A>

§

impl<'a, 'b, K, Q, V, S, A> Freeze for EntryRef<'a, 'b, K, Q, V, S, A>
where Q: ?Sized,

§

impl<'a, 'b, K, Q, V, S, A> RefUnwindSafe for EntryRef<'a, 'b, K, Q, V, S, A>
where Q: RefUnwindSafe + ?Sized, S: RefUnwindSafe, A: RefUnwindSafe, K: RefUnwindSafe, V: RefUnwindSafe,

§

impl<'a, 'b, K, Q, V, S, A> Send for EntryRef<'a, 'b, K, Q, V, S, A>
where K: Send, V: Send, S: Send, A: Send, Q: Sync + ?Sized,

§

impl<'a, 'b, K, Q, V, S, A> Sync for EntryRef<'a, 'b, K, Q, V, S, A>
where K: Sync, V: Sync, S: Sync, A: Sync, Q: Sync + ?Sized,

§

impl<'a, 'b, K, Q, V, S, A> Unpin for EntryRef<'a, 'b, K, Q, V, S, A>
where Q: ?Sized,

§

impl<'a, 'b, K, Q, V, S, A> UnsafeUnpin for EntryRef<'a, 'b, K, Q, V, S, A>
where Q: ?Sized,

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.