Struct OccupiedEntry
pub struct OccupiedEntry<'a, K, V, S = RandomState, A = Global>where
A: Allocator,{ /* private fields */ }
dep_hashbrown
and alloc
only.Expand description
A view into an occupied entry in a HashMap
.
It is part of the Entry
and EntryRef
enums.
§Examples
use hashbrown::hash_map::{Entry, HashMap, OccupiedEntry};
let mut map = HashMap::new();
map.extend([("a", 10), ("b", 20), ("c", 30)]);
let _entry_o: OccupiedEntry<_, _, _> = map.entry("a").insert(100);
assert_eq!(map.len(), 3);
// Existing key (insert and update)
match map.entry("a") {
Entry::Vacant(_) => unreachable!(),
Entry::Occupied(mut view) => {
assert_eq!(view.get(), &100);
let v = view.get_mut();
*v *= 10;
assert_eq!(view.insert(1111), 1000);
}
}
assert_eq!(map[&"a"], 1111);
assert_eq!(map.len(), 3);
// Existing key (take)
match map.entry("c") {
Entry::Vacant(_) => unreachable!(),
Entry::Occupied(view) => {
assert_eq!(view.remove_entry(), ("c", 30));
}
}
assert_eq!(map.get(&"c"), None);
assert_eq!(map.len(), 2);
Implementations§
§impl<'a, K, V, S, A> OccupiedEntry<'a, K, V, S, A>where
A: Allocator,
impl<'a, K, V, S, A> OccupiedEntry<'a, K, V, S, A>where
A: Allocator,
pub fn key(&self) -> &K
pub fn key(&self) -> &K
Gets a reference to the key in the entry.
§Examples
use hashbrown::hash_map::{Entry, HashMap};
let mut map: HashMap<&str, u32> = HashMap::new();
map.entry("poneyland").or_insert(12);
match map.entry("poneyland") {
Entry::Vacant(_) => panic!(),
Entry::Occupied(entry) => assert_eq!(entry.key(), &"poneyland"),
}
pub fn remove_entry(self) -> (K, V) ⓘ
pub fn remove_entry(self) -> (K, V) ⓘ
Take the ownership of the key and value from the map. Keeps the allocated memory for reuse.
§Examples
use hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
// The map is empty
assert!(map.is_empty() && map.capacity() == 0);
map.entry("poneyland").or_insert(12);
if let Entry::Occupied(o) = map.entry("poneyland") {
// We delete the entry from the map.
assert_eq!(o.remove_entry(), ("poneyland", 12));
}
assert_eq!(map.contains_key("poneyland"), false);
// Now map hold none elements
assert!(map.is_empty());
pub fn get(&self) -> &V
pub fn get(&self) -> &V
Gets a reference to the value in the entry.
§Examples
use hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
map.entry("poneyland").or_insert(12);
match map.entry("poneyland") {
Entry::Vacant(_) => panic!(),
Entry::Occupied(entry) => assert_eq!(entry.get(), &12),
}
pub fn get_mut(&mut self) -> &mut V
pub fn get_mut(&mut self) -> &mut V
Gets a mutable reference to the value in the entry.
If you need a reference to the OccupiedEntry
which may outlive the
destruction of the Entry
value, see into_mut
.
§Examples
use hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
map.entry("poneyland").or_insert(12);
assert_eq!(map["poneyland"], 12);
if let Entry::Occupied(mut o) = map.entry("poneyland") {
*o.get_mut() += 10;
assert_eq!(*o.get(), 22);
// We can use the same Entry multiple times.
*o.get_mut() += 2;
}
assert_eq!(map["poneyland"], 24);
pub fn into_mut(self) -> &'a mut V
pub fn into_mut(self) -> &'a mut V
Converts the OccupiedEntry
into 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
, see get_mut
.
§Examples
use hashbrown::hash_map::{Entry, HashMap};
let mut map: HashMap<&str, u32> = HashMap::new();
map.entry("poneyland").or_insert(12);
assert_eq!(map["poneyland"], 12);
let value: &mut u32;
match map.entry("poneyland") {
Entry::Occupied(entry) => value = entry.into_mut(),
Entry::Vacant(_) => panic!(),
}
*value += 10;
assert_eq!(map["poneyland"], 22);
pub fn insert(&mut self, value: V) -> V
pub fn insert(&mut self, value: V) -> V
Sets the value of the entry, and returns the entry’s old value.
§Examples
use hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
map.entry("poneyland").or_insert(12);
if let Entry::Occupied(mut o) = map.entry("poneyland") {
assert_eq!(o.insert(15), 12);
}
assert_eq!(map["poneyland"], 15);
pub fn remove(self) -> V
pub fn remove(self) -> V
Takes the value out of the entry, and returns it. Keeps the allocated memory for reuse.
§Examples
use hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
// The map is empty
assert!(map.is_empty() && map.capacity() == 0);
map.entry("poneyland").or_insert(12);
if let Entry::Occupied(o) = map.entry("poneyland") {
assert_eq!(o.remove(), 12);
}
assert_eq!(map.contains_key("poneyland"), false);
// Now map hold none elements
assert!(map.is_empty());
pub fn replace_entry_with<F>(self, f: F) -> Entry<'a, K, V, S, A>
pub fn replace_entry_with<F>(self, f: F) -> Entry<'a, K, V, S, A>
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 hashbrown::HashMap;
use hashbrown::hash_map::Entry;
let mut map: HashMap<&str, u32> = HashMap::new();
map.insert("poneyland", 42);
let entry = match map.entry("poneyland") {
Entry::Occupied(e) => {
e.replace_entry_with(|k, v| {
assert_eq!(k, &"poneyland");
assert_eq!(v, 42);
Some(v + 1)
})
}
Entry::Vacant(_) => panic!(),
};
match entry {
Entry::Occupied(e) => {
assert_eq!(e.key(), &"poneyland");
assert_eq!(e.get(), &43);
}
Entry::Vacant(_) => panic!(),
}
assert_eq!(map["poneyland"], 43);
let entry = match map.entry("poneyland") {
Entry::Occupied(e) => e.replace_entry_with(|_k, _v| None),
Entry::Vacant(_) => panic!(),
};
match entry {
Entry::Vacant(e) => {
assert_eq!(e.key(), &"poneyland");
}
Entry::Occupied(_) => panic!(),
}
assert!(!map.contains_key("poneyland"));
Trait Implementations§
§impl<K, V, S, A> Debug for OccupiedEntry<'_, K, V, S, A>
impl<K, V, S, A> Debug for OccupiedEntry<'_, K, V, S, A>
impl<K, V, S, A> Send for OccupiedEntry<'_, K, V, S, A>
impl<K, V, S, A> Sync for OccupiedEntry<'_, K, V, S, A>
Auto Trait Implementations§
impl<'a, K, V, S, A> Freeze for OccupiedEntry<'a, K, V, S, A>
impl<'a, K, V, S, A> RefUnwindSafe for OccupiedEntry<'a, K, V, S, A>
impl<'a, K, V, S, A> Unpin for OccupiedEntry<'a, K, V, S, A>
impl<'a, K, V, S = RandomState, A = Global> !UnwindSafe for OccupiedEntry<'a, K, V, S, A>
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize ⓘ
fn byte_align(&self) -> usize ⓘ
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of_val(&self) -> usize ⓘ
fn mem_align_of_val(&self) -> usize ⓘ
Source§fn mem_size_of_val(&self) -> usize ⓘ
fn mem_size_of_val(&self) -> usize ⓘ
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.