Struct LinearMap

Source
pub struct LinearMap<K, V>(/* private fields */);
Expand description

A linear key-value map backed by a Vec.

This map performs O(n) lookups and inserts. It is suitable only for small sets of keys which must implement Eq.

Internally stores key-value pairs in insertion order. Duplicate key inserts overwrite the previous value.

§Performance

Avoid using this for more than a few keys. All core operations are linear.

Implementations§

Source§

impl<K: Eq, V> LinearMap<K, V>

Source

pub fn new() -> Self

Creates a new empty LinearMap.

Source

pub fn with_capacity(capacity: usize) -> Self

Creates a new empty LinearMap with a pre-allocated capacity.

Source

pub fn get(&self, k: &K) -> Option<&V>

Gets a reference to the value associated with the key, if it exists.

Returns Some(&V) if found, or None if not present.

This is an O(n) operation.

Source

pub fn get_mut(&mut self, k: &K) -> Option<&mut V>

Gets a mutable reference to the value associated with the key, if it exists.

Returns Some(&mut V) if found, or None otherwise.

This is an O(n) operation.

Source

pub fn insert(&mut self, k: K, v: V) -> Option<V>

Inserts a key-value pair into the map.

If the key exists, swaps the old value with the new one and returns the old value. Otherwise, appends the new pair and returns None.

This is an O(n) operation due to the linear search.

Source

pub fn get_or_insert_with(&mut self, k: K, f: impl FnOnce() -> V) -> &mut V

Returns a mutable reference to the value for the given key.

If the key exists, returns a mutable reference to the value. Otherwise, inserts a new value created by the provided closure and returns a reference to it.

This is an O(n) operation due to the key search.

Source

pub fn values(&self) -> impl Iterator<Item = &V>

Returns an iterator over the values in the map.

Values are yielded in insertion order.

Source

pub fn keys(&self) -> impl Iterator<Item = &K>

Returns an iterator over the keys in the map.

Keys are yielded in insertion order.

Source

pub fn iter(&self) -> impl Iterator<Item = &(K, V)>

Returns an iterator over all key-value pairs in the map.

Items are yielded in insertion order.

Trait Implementations§

Source§

impl<K: Debug, V: Debug> Debug for LinearMap<K, V>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<K, V> Default for LinearMap<K, V>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<K: Eq, V> FromIterator<(K, V)> for LinearMap<K, V>

Source§

fn from_iter<T: IntoIterator<Item = (K, V)>>(iter: T) -> Self

Builds a LinearMap from an iterator of key-value pairs.

Later duplicates overwrite earlier entries.

This calls insert in a loop, so is O(n^2)!!

Source§

impl<K: Eq, V> Index<&K> for LinearMap<K, V>

Source§

type Output = V

The returned type after indexing.
Source§

fn index(&self, index: &K) -> &Self::Output

Performs the indexing (container[index]) operation. Read more
Source§

impl<'a, K, V> IntoIterator for &'a LinearMap<K, V>

Source§

type Item = &'a (K, V)

The type of the elements being iterated over.
Source§

type IntoIter = <&'a Vec<(K, V)> as IntoIterator>::IntoIter

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<K, V> IntoIterator for LinearMap<K, V>

Source§

type Item = (K, V)

The type of the elements being iterated over.
Source§

type IntoIter = <Vec<(K, V)> as IntoIterator>::IntoIter

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<K, V> Freeze for LinearMap<K, V>

§

impl<K, V> RefUnwindSafe for LinearMap<K, V>

§

impl<K, V> Send for LinearMap<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for LinearMap<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for LinearMap<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for LinearMap<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.