pub struct LinearMap<K, V> { /* private fields */ }
Expand description
A map implemented by searching linearly in a vector.
LinearMap
’s keys are compared using the Eq
trait. All search operations
(contains_key
, get
, get_mut
, insert
, and remove
) run in O(n)
time, making this
implementation suitable only for small numbers of keys. The ordering of the keys in the
underlying vector is arbitrary.
It is a logic error for a key to be modified in such a way that the key’s equality, as
determined by the Eq
trait, changes while it is in the map. This is normally only
possible through Cell
, RefCell
, global state, I/O, or unsafe code.
§Example
use linear_map::LinearMap;
// type inference lets us omit an explicit type signature (which
// would be `LinearMap<&str, &str>` in this example).
let mut book_reviews = LinearMap::new();
// review some books.
book_reviews.insert("Adventures of Huckleberry Finn", "My favorite book.");
book_reviews.insert("Grimms' Fairy Tales", "Masterpiece.");
book_reviews.insert("Pride and Prejudice", "Very enjoyable.");
book_reviews.insert("The Adventures of Sherlock Holmes", "Eye lyked it alot.");
// check for a specific one.
if !book_reviews.contains_key("Les Misérables") {
println!("We've got {} reviews, but Les Misérables ain't one.",
book_reviews.len());
}
// oops, this review has a lot of spelling mistakes. let's delete it.
book_reviews.remove("The Adventures of Sherlock Holmes");
// look up the values associated with some keys.
let to_find = ["Pride and Prejudice", "Alice's Adventure in Wonderland"];
for book in &to_find {
match book_reviews.get(book) {
Some(review) => println!("{}: {}", book, review),
None => println!("{} is unreviewed.", book)
}
}
// iterate over everything.
for (book, review) in &book_reviews {
println!("{}: \"{}\"", book, review);
}
Implementations§
Source§impl<K: Eq, V> LinearMap<K, V>
impl<K: Eq, V> LinearMap<K, V>
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates an empty map with the given initial capacity.
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the number of elements the map can hold without reallocating.
Sourcepub fn reserve(&mut self, additional: usize)
pub fn reserve(&mut self, additional: usize)
Reserves capacity for at least additional
more to be inserted in the
map. The collection may reserve more space to avoid frequent
reallocations.
§Panics
Panics if the new allocation size overflows usize
.
Sourcepub fn reserve_exact(&mut self, additional: usize)
pub fn reserve_exact(&mut self, additional: usize)
Reserves the minimum capacity for exactly additional
more elemnnts to
be inserted in the map.
Note that the allocator may give the collection more space than it
requests. Therefore capacity cannot be relied upon to be precisely
minimal. Prefer reserve
if future insertions are expected.
§Panics
Panics if the new capacity overflows usize
.
Sourcepub fn shrink_to_fit(&mut self)
pub fn shrink_to_fit(&mut self)
Shrinks the capacity of the map as much as possible.
It will drop down as close as possible to the current length but the allocator may still inform the map that there is more space than necessary. Therefore capacity cannot be relid upon to be minimal.
Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the map, removing all elements. Keeps the allocated memory for reuse.
Sourcepub fn retain<F>(&mut self, keep_fn: F)
pub fn retain<F>(&mut self, keep_fn: F)
Scan through the map and keep those key-value pairs where the
closure returns true
.
The order the elements are visited is not specified.
Sourcepub fn drain(&mut self) -> Drain<'_, K, V> ⓘ
pub fn drain(&mut self) -> Drain<'_, K, V> ⓘ
Removes all key-value pairs from the map and returns an iterator that yields them in arbitrary order.
All key-value pairs are removed even if the iterator is not exhausted. However, the behavior of this method is unspecified if the iterator is leaked.
The iterator’s item type is (K, V)
.
Sourcepub fn iter(&self) -> Iter<'_, K, V> ⓘ
pub fn iter(&self) -> Iter<'_, K, V> ⓘ
Returns an iterator yielding references to the map’s keys and their corresponding values in arbitrary order.
The iterator’s item type is (&K, &V)
.
Sourcepub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ
pub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ
Returns an iterator yielding references to the map’s keys and mutable references to their corresponding values in arbitrary order.
The iterator’s item type is (&K, &mut V)
.
Sourcepub fn keys(&self) -> Keys<'_, K, V> ⓘ
pub fn keys(&self) -> Keys<'_, K, V> ⓘ
Returns an iterator yielding references to the map’s keys in arbitrary order.
The iterator’s item type is &K
.
Sourcepub fn values(&self) -> Values<'_, K, V> ⓘ
pub fn values(&self) -> Values<'_, K, V> ⓘ
Returns an iterator yielding references to the map’s values in arbitrary order.
The iterator’s item type is &V
.
Sourcepub fn get<Q: ?Sized + Eq>(&self, key: &Q) -> Option<&V>where
K: Borrow<Q>,
pub fn get<Q: ?Sized + Eq>(&self, key: &Q) -> Option<&V>where
K: Borrow<Q>,
Returns a reference to the value in the map whose key is equal to the given key.
Returns None
if the map contains no such key.
The given key may be any borrowed form of the map’s key type, but Eq
on the borrowed form
must match that of the key type.
Sourcepub fn get_mut<Q: ?Sized + Eq>(&mut self, key: &Q) -> Option<&mut V>where
K: Borrow<Q>,
pub fn get_mut<Q: ?Sized + Eq>(&mut self, key: &Q) -> Option<&mut V>where
K: Borrow<Q>,
Returns a mutable reference to the value in the map whose key is equal to the given key.
Returns None
if the map contains no such key.
The given key may be any borrowed form of the map’s key type, but Eq
on the borrowed form
must match that of the key type.
Sourcepub fn contains_key<Q: ?Sized + Eq>(&self, key: &Q) -> boolwhere
K: Borrow<Q>,
pub fn contains_key<Q: ?Sized + Eq>(&self, key: &Q) -> boolwhere
K: Borrow<Q>,
Checks if the map contains a key that is equal to the given key.
The given key may be any borrowed form of the map’s key type, but Eq
on the borrowed form
must match that of the key type.
Sourcepub fn insert(&mut self, key: K, value: V) -> Option<V>
pub fn insert(&mut self, key: K, value: V) -> Option<V>
Inserts a key-value pair into the map.
Returns None
if the map did not contain a key that is equal to the given key.
If the map did contain such a key, its corresponding value is replaced with the given
value, and the old value is returned. The key is not updated, though. This matters for
values that can be ==
without being identical. See the [standard library’s documentation]
std for more details.
Sourcepub fn remove<Q: ?Sized + Eq>(&mut self, key: &Q) -> Option<V>where
K: Borrow<Q>,
pub fn remove<Q: ?Sized + Eq>(&mut self, key: &Q) -> Option<V>where
K: Borrow<Q>,
Removes the key in the map that is equal to the given key and returns its corresponding value.
Returns None
if the map contained no such key.
The given key may be any borrowed form of the map’s key type, but Eq
on the borrowed form
must match that of the key type.
Trait Implementations§
Source§impl<K: Eq, V> Extend<(K, V)> for LinearMap<K, V>
impl<K: Eq, V> Extend<(K, V)> for LinearMap<K, V>
Source§fn extend<I: IntoIterator<Item = (K, V)>>(&mut self, key_values: I)
fn extend<I: IntoIterator<Item = (K, V)>>(&mut self, key_values: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Source§impl<'a, K: Eq, V> IntoIterator for &'a LinearMap<K, V>
impl<'a, K: Eq, V> IntoIterator for &'a LinearMap<K, V>
Source§impl<'a, K: Eq, V> IntoIterator for &'a mut LinearMap<K, V>
impl<'a, K: Eq, V> IntoIterator for &'a mut LinearMap<K, V>
Source§impl<K: Eq, V> IntoIterator for LinearMap<K, V>
impl<K: Eq, V> IntoIterator for LinearMap<K, V>
impl<K: Eq, V: Eq> Eq for LinearMap<K, V>
Auto Trait Implementations§
impl<K, V> Freeze for LinearMap<K, V>
impl<K, V> RefUnwindSafe for LinearMap<K, V>where
K: RefUnwindSafe,
V: RefUnwindSafe,
impl<K, V> Send for LinearMap<K, V>
impl<K, V> Sync for LinearMap<K, V>
impl<K, V> Unpin for LinearMap<K, V>
impl<K, V> UnwindSafe for LinearMap<K, V>where
K: UnwindSafe,
V: UnwindSafe,
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)