Struct OccupiedEntry
pub struct OccupiedEntry<'a, K, V, S = DefaultHashBuilder, A: Allocator = Global> { /* private fields */ }
A view into an occupied entry in a HashMap.
It is part of the Entry and EntryRef enums.
Examples
use ;
let mut map = new;
map.extend;
let _entry_o: = map.entry.insert;
assert_eq!;
// Existing key (insert and update)
match map.entry
assert_eq!;
assert_eq!;
// Existing key (take)
match map.entry
assert_eq!;
assert_eq!;
Implementations
impl<'a, K, V, S, A: Allocator> OccupiedEntry<'a, K, V, S, A>
fn key(&self) -> &KGets a reference to the key in the entry.
Examples
use ; let mut map: = new; map.entry.or_insert; match map.entryfn replace_key(&mut self, key: K) -> K where K: Equivalent<K>,Replaces the key in the entry with a new one.
Panics
This method panics if
keyis not equivalent to the key in the entry.Examples
use ; let mut map: = new; let old_key = "poneyland"; let new_key = Boxleak; map.entry.or_insert; match map.entry # // appease miri; no memory leaks here! # drop; # unsafeunsafe fn replace_key_unchecked(&mut self, key: K) -> KReplaces the key in the entry with a new one, without checking the equivalence of the key.
Safety
This operation is safe if you replace the key with an equivalent one.
Additionally, this operation (and following operations) are guaranteed to not violate memory safety.
However this operation is still unsafe because the resulting
HashMapmay be passed to unsafe code which does expect the map to behave correctly. If the map has keys at unexpected positions inside it, future operations may panic, loop forever, or return unexpected results, potentially violating memory safety.Examples
use ; let mut map: = new; let old_key = "poneyland"; let new_key = Boxleak; map.entry.or_insert; match map.entry # // appease miri; no memory leaks here! # drop; # unsafefn remove_entry(self) -> (K, V)Take the ownership of the key and value from the map. Keeps the allocated memory for reuse.
Examples
use HashMap; use Entry; let mut map: = new; // The map is empty assert!; map.entry.or_insert; if let Occupied = map.entry assert_eq!; // Now map hold none elements assert!;fn get(&self) -> &VGets a reference to the value in the entry.
Examples
use HashMap; use Entry; let mut map: = new; map.entry.or_insert; match map.entryfn get_mut(&mut self) -> &mut VGets a mutable reference to the value in the entry.
If you need a reference to the
OccupiedEntrywhich may outlive the destruction of theEntryvalue, seeinto_mut.Examples
use HashMap; use Entry; let mut map: = new; map.entry.or_insert; assert_eq!; if let Occupied = map.entry assert_eq!;fn into_mut(self) -> &'a mut VConverts the
OccupiedEntryinto a mutable reference to the value in the entry with a lifetime bound to the map itself.If you need multiple references to the
OccupiedEntry, seeget_mut.Examples
use ; let mut map: = new; map.entry.or_insert; assert_eq!; let value: &mut u32; match map.entry *value += 10; assert_eq!;fn into_entry(self) -> (&'a K, &'a mut V)Converts the
OccupiedEntryinto a reference to the key and a mutable reference to the value in the entry with a lifetime bound to the map itself.If you need multiple references to the
OccupiedEntry, seekeyandget_mut.Examples
use ; let mut map: = new; map.entry.or_insert; assert_eq!; let key_val: ; match map.entry *key_val.1 += 10; assert_eq!; assert_eq!;fn insert(&mut self, value: V) -> VSets the value of the entry, and returns the entry's old value.
Examples
use HashMap; use Entry; let mut map: = new; map.entry.or_insert; if let Occupied = map.entry assert_eq!;fn remove(self) -> VTakes the value out of the entry, and returns it. Keeps the allocated memory for reuse.
Examples
use HashMap; use Entry; let mut map: = new; // The map is empty assert!; map.entry.or_insert; if let Occupied = map.entry assert_eq!; // Now map hold none elements assert!;fn replace_entry_with<F>(self, f: F) -> Entry<'a, K, V, S, A> where F: FnOnce(&K, V) -> Option<V>,Provides shared access to the key and owned access to the value of the entry and allows to replace or remove it based on the value of the returned option.
Examples
use HashMap; use Entry; let mut map: = new; map.insert; let entry = match map.entry ; match entry assert_eq!; let entry = match map.entry ; match entry assert!;fn into_map(self) -> &'a mut HashMap<K, V, S, A>Converts the
OccupiedEntryinto a mutable reference to the underlying map.
Trait Implementations
impl<K, V, S, A> Send for OccupiedEntry<'_, K, V, S, A>
where
K: Send,
V: Send,
S: Send,
A: Send + Allocator,
impl<K, V, S, A> Sync for OccupiedEntry<'_, K, V, S, A>
where
K: Sync,
V: Sync,
S: Sync,
A: Sync + Allocator,
impl<K: Debug, V: Debug, S, A: Allocator> Debug for OccupiedEntry<'_, K, V, S, A>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Auto Trait Implementations
impl<'a, K, V, S = DefaultHashBuilder, A = Global> !UnwindSafe for OccupiedEntry<'a, K, V, S, A>
impl<'a, K, V, S, A> Freeze for OccupiedEntry<'a, K, V, S, A>
where
Bucket<(K, V)>: Freeze,
&'a mut HashMap<K, V, S, A>: Freeze,
impl<'a, K, V, S, A> RefUnwindSafe for OccupiedEntry<'a, K, V, S, A>
where
Bucket<(K, V)>: RefUnwindSafe,
&'a mut HashMap<K, V, S, A>: RefUnwindSafe,
impl<'a, K, V, S, A> Unpin for OccupiedEntry<'a, K, V, S, A>
where
Bucket<(K, V)>: Unpin,
&'a mut HashMap<K, V, S, A>: Unpin,
impl<'a, K, V, S, A> UnsafeUnpin for OccupiedEntry<'a, K, V, S, A>
where
Bucket<(K, V)>: UnsafeUnpin,
&'a mut HashMap<K, V, S, A>: UnsafeUnpin,
Blanket Implementations
impl<T> Any for OccupiedEntry<'a, K, V, S, A>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for OccupiedEntry<'a, K, V, S, A>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for OccupiedEntry<'a, K, V, S, A>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> From<T> for OccupiedEntry<'a, K, V, S, A>
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into<U> for OccupiedEntry<'a, K, V, S, A>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for OccupiedEntry<'a, K, V, S, A>
where
U: Into<T>,
type Error = never;fn try_from(value: U) -> Result<T, never>
impl<T, U> TryInto<U> for OccupiedEntry<'a, K, V, S, A>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>