Enum Entry

pub enum Entry<'a, K: 'a, V: 'a, A: Allocator + Clone = Global>

A view into a single entry in a map, which may either be vacant or occupied.

This enum is constructed from the entry method on BTreeMap.

Variants

Vacant(VacantEntry<'a, K, V, A>)

A vacant entry.

Occupied(OccupiedEntry<'a, K, V, A>)

An occupied entry.

Implementations

impl<'a, K: Ord, V, A: Allocator + Clone> Entry<'a, K, V, A>

fn or_insert(self, default: V) -> &'a mut V

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 std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();
map.entry("poneyland").or_insert(12);

assert_eq!(map["poneyland"], 12);
fn or_insert_with<F: FnOnce() -> V>(self, default: F) -> &'a mut V

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 std::collections::BTreeMap;

let mut map: BTreeMap<&str, String> = BTreeMap::new();
let s = "hoho".to_string();

map.entry("poneyland").or_insert_with(|| s);

assert_eq!(map["poneyland"], "hoho".to_string());
fn or_try_insert_with<F: FnOnce() -> Result<V, E>, E>(self, default: F) -> Result<&'a mut V, E>

Ensures a value is in the entry by inserting the result of a fallible default function if empty, and returns a mutable reference to the value in the entry.

This method works identically to or_insert_with except that the default function should return a Result and, in the case of an error, the error is propagated.

Examples

#![feature(try_entry)]
# fn main() -> Result<(), std::num::ParseIntError> {
use std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();
let value = "42";

map.entry("poneyland").or_try_insert_with(|| value.parse())?;

assert_eq!(map["poneyland"], 42);
# Ok(())
# }
fn or_insert_with_key<F: FnOnce(&K) -> V>(self, default: F) -> &'a mut V

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 a reference to the key that was moved during the .entry(key) method call.

The reference to the moved key is provided so that cloning or copying the key is unnecessary, unlike with .or_insert_with(|| ... ).

Examples

use std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();

map.entry("poneyland").or_insert_with_key(|key| key.chars().count());

assert_eq!(map["poneyland"], 9);
fn or_try_insert_with_key<F: FnOnce(&K) -> Result<V, E>, E>(self, default: F) -> Result<&'a mut V, E>

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 a reference to the key that was moved during the entry(key) method call.

This method works identically to or_insert_with_key except that the default function should return a Result and, in the case of an error, the error is propagated.

Examples

#![feature(try_entry)]
# fn main() -> Result<(), std::num::ParseIntError> {
use std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();

map.entry("42").or_try_insert_with_key(|key| key.parse())?;

assert_eq!(map["42"], 42);
# Ok(())
# }
fn key(&self) -> &K

Returns a reference to this entry's key.

Examples

use std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();
assert_eq!(map.entry("poneyland").key(), &"poneyland");
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 std::collections::BTreeMap;

let mut map: BTreeMap<&str, usize> = BTreeMap::new();

map.entry("poneyland")
   .and_modify(|e| { *e += 1 })
   .or_insert(42);
assert_eq!(map["poneyland"], 42);

map.entry("poneyland")
   .and_modify(|e| { *e += 1 })
   .or_insert(42);
assert_eq!(map["poneyland"], 43);
fn insert_entry(self, value: V) -> OccupiedEntry<'a, K, V, A>

Sets the value of the entry, and returns an OccupiedEntry.

Examples

use std::collections::BTreeMap;

let mut map: BTreeMap<&str, String> = BTreeMap::new();
let entry = map.entry("poneyland").insert_entry("hoho".to_string());

assert_eq!(entry.key(), &"poneyland");

impl<'a, K: Ord, V: Default, A: Allocator + Clone> Entry<'a, K, V, A>

fn or_default(self) -> &'a mut V

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 std::collections::BTreeMap;

let mut map: BTreeMap<&str, Option<usize>> = BTreeMap::new();
map.entry("poneyland").or_default();

assert_eq!(map["poneyland"], None);

Trait Implementations

impl<K: Debug + Ord, V: Debug, A: Allocator + Clone> Debug for Entry<'_, K, V, A>

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

Auto Trait Implementations

impl<'a, K, V, A = Global> !UnwindSafe for Entry<'a, K, V, A>

impl<'a, K, V, A> Freeze for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: Freeze, OccupiedEntry<'a, K, V, A>: Freeze,

impl<'a, K, V, A> RefUnwindSafe for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: RefUnwindSafe, OccupiedEntry<'a, K, V, A>: RefUnwindSafe,

impl<'a, K, V, A> Send for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: Send, OccupiedEntry<'a, K, V, A>: Send,

impl<'a, K, V, A> Sync for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: Sync, OccupiedEntry<'a, K, V, A>: Sync,

impl<'a, K, V, A> Unpin for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: Unpin, OccupiedEntry<'a, K, V, A>: Unpin,

impl<'a, K, V, A> UnsafeUnpin for Entry<'a, K, V, A> where VacantEntry<'a, K, V, A>: UnsafeUnpin, OccupiedEntry<'a, K, V, A>: UnsafeUnpin,

Blanket Implementations

impl<T> Any for Entry<'a, K, V, A> where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Entry<'a, K, V, A> where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Entry<'a, K, V, A> where T: ?Sized,

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

impl<T> From<T> for Entry<'a, K, V, A>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> SizeHint for Entry<'a, K, V, A> where T: ?Sized,

fn lower_bound(&self) -> usize
fn upper_bound(&self) -> Option<usize>

impl<T> SizedTypeProperties for Entry<'a, K, V, A>

impl<T, U> Into<U> for Entry<'a, K, V, A> 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 Entry<'a, K, V, A> where U: Into<T>,

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

impl<T, U> TryInto<U> for Entry<'a, K, V, A> where U: TryFrom<T>,

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