pub struct BTreeIndexMap<K, V> { /* private fields */ }Expand description
BTree-based map with stable entry indices.
Each key maps to exactly one value. Entries are stored in a Vec and
assigned a stable index equal to their position in that Vec. The
index of an entry does not change as long as no entry is removed. A
B-tree over the keys provides O(log n) lookup, insertion, and removal,
while the Vec backing allows O(1) random access by index.
§Example
use btree_indexmap::BTreeIndexMap;
let mut map = BTreeIndexMap::new();
// Entries are stored in insertion order and assigned a stable index.
map.insert("banana", 3);
map.insert("apple", 5);
// O(1) access by index (insertion order).
assert_eq!(map.as_entries()[0], ("banana", 3));
assert_eq!(map.as_entries()[1], ("apple", 5));
// O(log n) lookup by key, returning the stable index alongside the value.
assert_eq!(map.get_full("apple"), Some((1, &"apple", &5)));Implementations§
Source§impl<K, V> BTreeIndexMap<K, V>
impl<K, V> BTreeIndexMap<K, V>
Sourcepub fn singleton(key: K, value: V) -> Selfwhere
K: Ord,
pub fn singleton(key: K, value: V) -> Selfwhere
K: Ord,
Creates a new map containing the single (key, value) entry.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all entries from the map.
This keeps the capacity allocated for the entries.
Sourcepub fn as_entries(&self) -> &[(K, V)]
pub fn as_entries(&self) -> &[(K, V)]
Returns the entries of the map as a slice, in insertion (index) order.
Sourcepub fn get_full<Q>(&self, key: &Q) -> Option<(usize, &K, &V)>where
Q: ?Sized + Comparable<K>,
pub fn get_full<Q>(&self, key: &Q) -> Option<(usize, &K, &V)>where
Q: ?Sized + Comparable<K>,
Returns the index, key, and value of the entry matching key, if
any.
Sourcepub fn get_entry<Q>(&self, key: &Q) -> Option<(&K, &V)>where
Q: ?Sized + Comparable<K>,
pub fn get_entry<Q>(&self, key: &Q) -> Option<(&K, &V)>where
Q: ?Sized + Comparable<K>,
Returns the key and value of the entry matching key, if any.
Sourcepub fn get<Q>(&self, key: &Q) -> Option<&V>where
Q: ?Sized + Comparable<K>,
pub fn get<Q>(&self, key: &Q) -> Option<&V>where
Q: ?Sized + Comparable<K>,
Returns a reference to the value associated with key, if any.
Sourcepub fn get_mut_full<Q>(&mut self, key: &Q) -> Option<(usize, &K, &mut V)>where
Q: ?Sized + Comparable<K>,
pub fn get_mut_full<Q>(&mut self, key: &Q) -> Option<(usize, &K, &mut V)>where
Q: ?Sized + Comparable<K>,
Returns the index, key, and a mutable reference to the value of the
entry matching key, if any.
Sourcepub fn get_mut_entry<Q>(&mut self, key: &Q) -> Option<(&K, &mut V)>where
Q: ?Sized + Comparable<K>,
pub fn get_mut_entry<Q>(&mut self, key: &Q) -> Option<(&K, &mut V)>where
Q: ?Sized + Comparable<K>,
Returns the key and a mutable reference to the value of the entry
matching key, if any.
Sourcepub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>where
Q: ?Sized + Comparable<K>,
pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>where
Q: ?Sized + Comparable<K>,
Returns a mutable reference to the value associated with key, if
any.
Sourcepub fn entry(&mut self, key: K) -> Entry<'_, K, V>where
K: Ord,
pub fn entry(&mut self, key: K) -> Entry<'_, K, V>where
K: Ord,
Gets the entry associated with key for in-place manipulation.
§Example
use btree_indexmap::{BTreeIndexMap, map::Entry};
let mut map: BTreeIndexMap<&str, i32> = BTreeIndexMap::new();
match map.entry("a") {
Entry::Vacant(e) => {
e.insert(1);
}
Entry::Occupied(_) => unreachable!(),
}
assert_eq!(map.get("a"), Some(&1));Sourcepub fn insert_full(&mut self, key: K, value: V) -> (usize, Option<V>)where
K: Ord,
pub fn insert_full(&mut self, key: K, value: V) -> (usize, Option<V>)where
K: Ord,
Inserts a key-value pair in the map, returning the index of the
entry and, if key was already present, its previous value.
Sourcepub fn insert(&mut self, key: K, value: V) -> Option<V>where
K: Ord,
pub fn insert(&mut self, key: K, value: V) -> Option<V>where
K: Ord,
Inserts a key-value pair in the map, returning the previous value
associated with key, if any.
Sourcepub fn shift_remove_full<Q>(&mut self, key: &Q) -> Option<(usize, K, V)>where
Q: ?Sized + Comparable<K>,
pub fn shift_remove_full<Q>(&mut self, key: &Q) -> Option<(usize, K, V)>where
Q: ?Sized + Comparable<K>,
Removes the entry matching key, returning its former index, key,
and value, if it was present.
Shifts every following entry one index down.
Sourcepub fn shift_remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>where
Q: ?Sized + Comparable<K>,
pub fn shift_remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>where
Q: ?Sized + Comparable<K>,
Removes the entry matching key, returning its key and value, if it
was present.
Shifts every following entry one index down.
Sourcepub fn shift_remove<Q>(&mut self, key: &Q) -> Option<V>where
Q: ?Sized + Comparable<K>,
pub fn shift_remove<Q>(&mut self, key: &Q) -> Option<V>where
Q: ?Sized + Comparable<K>,
Removes the entry matching key, returning its value, if it was
present.
Shifts every following entry one index down.
Sourcepub fn swap_remove_full<Q>(&mut self, key: &Q) -> Option<(usize, K, V)>
pub fn swap_remove_full<Q>(&mut self, key: &Q) -> Option<(usize, K, V)>
Removes the entry matching key, returning its former index, key,
and value, if it was present.
Moves the last entry into the removed slot.
Sourcepub fn swap_remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
pub fn swap_remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
Removes the entry matching key, returning its key and value, if it
was present.
Moves the last entry into the removed slot.
Sourcepub fn swap_remove<Q>(&mut self, key: &Q) -> Option<V>
pub fn swap_remove<Q>(&mut self, key: &Q) -> Option<V>
Removes the entry matching key, returning its value, if it was
present.
Moves the last entry into the removed slot.
Sourcepub fn iter(&self) -> Iter<'_, K, V> ⓘ
pub fn iter(&self) -> Iter<'_, K, V> ⓘ
Returns an iterator over the entries of the map, in insertion (index) order.
Sourcepub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ
pub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ
Returns an iterator over the entries of the map, with a mutable reference to the value, in insertion (index) order.
Sourcepub fn iter_sorted(&self) -> IterSorted<'_, K, V> ⓘ
pub fn iter_sorted(&self) -> IterSorted<'_, K, V> ⓘ
Returns an iterator over the entries of the map, sorted according to
K’s implementation of Ord.
Sourcepub fn iter_mut_sorted(&mut self) -> IterMutSorted<'_, K, V> ⓘ
pub fn iter_mut_sorted(&mut self) -> IterMutSorted<'_, K, V> ⓘ
Returns an iterator over the entries of the map, with a mutable
reference to the value, sorted according to K’s implementation of
Ord.
Sourcepub fn into_iter_sorted(self) -> IntoIterSorted<K, V> ⓘ
pub fn into_iter_sorted(self) -> IntoIterSorted<K, V> ⓘ
Turns this map into an iterator over its entries, sorted according
to K’s implementation of Ord.
Sourcepub fn keys(&self) -> Keys<'_, K, V> ⓘ
pub fn keys(&self) -> Keys<'_, K, V> ⓘ
Returns an iterator over the keys of the map, in insertion (index) order.
Sourcepub fn values(&self) -> Values<'_, K, V> ⓘ
pub fn values(&self) -> Values<'_, K, V> ⓘ
Returns an iterator over the values of the map, in insertion (index) order.
Sourcepub fn values_mut(&mut self) -> ValuesMut<'_, K, V> ⓘ
pub fn values_mut(&mut self) -> ValuesMut<'_, K, V> ⓘ
Returns an iterator over mutable references to the values of the map, in insertion (index) order.
Trait Implementations§
Source§impl<K: Clone, V: Clone> Clone for BTreeIndexMap<K, V>
impl<K: Clone, V: Clone> Clone for BTreeIndexMap<K, V>
Source§fn clone(&self) -> BTreeIndexMap<K, V>
fn clone(&self) -> BTreeIndexMap<K, V>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<K, V> Default for BTreeIndexMap<K, V>
impl<K, V> Default for BTreeIndexMap<K, V>
impl<K: Eq, V: Eq> Eq for BTreeIndexMap<K, V>
Source§impl<K: Ord, V> Extend<(K, V)> for BTreeIndexMap<K, V>
impl<K: Ord, V> Extend<(K, V)> for BTreeIndexMap<K, V>
Source§fn extend<T: IntoIterator<Item = (K, V)>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = (K, V)>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: T)
fn extend_one(&mut self, item: T)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<K: Ord, V> FromIterator<(K, V)> for BTreeIndexMap<K, V>
impl<K: Ord, V> FromIterator<(K, V)> for BTreeIndexMap<K, V>
Source§impl<K, V, Q> Index<&Q> for BTreeIndexMap<K, V>where
Q: ?Sized + Comparable<K>,
impl<K, V, Q> Index<&Q> for BTreeIndexMap<K, V>where
Q: ?Sized + Comparable<K>,
Source§impl<K, V> IntoIterator for BTreeIndexMap<K, V>
impl<K, V> IntoIterator for BTreeIndexMap<K, V>
Source§impl<'a, K, V> IntoIterator for &'a BTreeIndexMap<K, V>
impl<'a, K, V> IntoIterator for &'a BTreeIndexMap<K, V>
Source§impl<'a, K, V> IntoIterator for &'a mut BTreeIndexMap<K, V>
impl<'a, K, V> IntoIterator for &'a mut BTreeIndexMap<K, V>
Source§impl<K: Ord, V: Ord> Ord for BTreeIndexMap<K, V>
impl<K: Ord, V: Ord> Ord for BTreeIndexMap<K, V>
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<K: PartialOrd, V: PartialOrd> PartialOrd for BTreeIndexMap<K, V>
impl<K: PartialOrd, V: PartialOrd> PartialOrd for BTreeIndexMap<K, V>
Auto Trait Implementations§
impl<K, V> Freeze for BTreeIndexMap<K, V>
impl<K, V> RefUnwindSafe for BTreeIndexMap<K, V>
impl<K, V> Send for BTreeIndexMap<K, V>
impl<K, V> Sync for BTreeIndexMap<K, V>
impl<K, V> Unpin for BTreeIndexMap<K, V>
impl<K, V> UnsafeUnpin for BTreeIndexMap<K, V>
impl<K, V> UnwindSafe for BTreeIndexMap<K, V>
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.