Struct MultiMap

Source
pub struct MultiMap<K1: Eq + Hash, K2: Eq + Hash, V> { /* private fields */ }

Implementations§

Source§

impl<K1: Eq + Hash + Clone, K2: Eq + Hash + Clone, V> MultiMap<K1, K2, V>

Source

pub fn new() -> MultiMap<K1, K2, V>

Creates a new MultiMap. The primary key is of type K1 and the secondary key is of type K2. The value is of type V. This is as compared to a std::collections::HashMap which is typed on just K and V.

Internally, two HashMaps are created - a main one on <K1, (K2, V)> and a second one on <K2, K1>. The (K2, V) tuple is so that when an item is removed using the K1 key, the appropriate K2 value is available so the K2->K1 map can be removed from the second HashMap, to keep them in sync.

Source

pub fn with_capacity(capacity: usize) -> MultiMap<K1, K2, V>

Creates an empty MultiMap with the specified capacity.

The multi map will be able to hold at least capacity elements without reallocating. If capacity is 0, the multi map will not allocate.

Source

pub fn insert(&mut self, key_one: K1, key_two: K2, value: V)

Insert an item into the MultiMap. You must supply both keys to insert an item. The keys cannot be modified at a later date, so if you only have one key at this time, use a placeholder value for the second key (perhaps K2 is Option<...>) and remove then re-insert when the second key becomes available.

Source

pub fn get(&self, key: &K1) -> Option<&V>

Obtain a reference to an item in the MultiMap using the primary key, just like a HashMap.

Source

pub fn get_mut(&mut self, key: &K1) -> Option<&mut V>

Obtain a mutable reference to an item in the MultiMap using the primary key, just like a HashMap.

Source

pub fn get_alt(&self, key: &K2) -> Option<&V>

Obtain a reference to an item in the MultiMap using the secondary key. Ordinary HashMaps can’t do this.

Source

pub fn get_mut_alt(&mut self, key: &K2) -> Option<&mut V>

Obtain a mutable reference to an item in the MultiMap using the secondary key. Ordinary HashMaps can’t do this.

Source

pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
where K1: Borrow<Q>, Q: Hash + Eq + ?Sized,

Remove an item from the HashMap using the primary key. The value for the given key is returned (if it exists), just like a HashMap. This removes an item from the main HashMap, and the second <K2, K1> HashMap.

Source

pub fn contains_key<Q>(&self, key: &Q) -> bool
where K1: Borrow<Q>, Q: Hash + Eq + ?Sized,

Returns true if the map contains a value for the specified key. The key may be any borrowed form of the map’s key type, but Hash and Eq on the borrowed form must match those for the key type

§Example
#[macro_use]
extern crate multi_map;
use multi_map::MultiMap;
let map = multimap! {
    1, "One" => String::from("Eins"),
    2, "Two" => String::from("Zwei"),
    3, "Three" => String::from("Drei"),
};
assert!(map.contains_key(&1));
assert!(!map.contains_key(&4));
Source

pub fn contains_key_alt<Q>(&self, key: &Q) -> bool
where K2: Borrow<Q>, Q: Hash + Eq + ?Sized,

Returns true if the map contains a value for the specified alternative key. The key may be any borrowed form of the map’s key type, but Hash and Eq on the borrowed form must match those for the key type

§Example
#[macro_use]
extern crate multi_map;
use multi_map::MultiMap;
let map = multimap! {
    1, "One" => String::from("Eins"),
    2, "Two" => String::from("Zwei"),
    3, "Three" => String::from("Drei"),
};
assert!(map.contains_key_alt(&"One"));
assert!(!map.contains_key_alt(&"Four"));
Source

pub fn remove_alt<Q>(&mut self, key: &Q) -> Option<V>
where K2: Borrow<Q>, Q: Hash + Eq + ?Sized,

Remove an item from the HashMap using the secondary key. The value for the given key is returned (if it exists). Ordinary HashMaps can’t do this. This removes an item from both the main HashMap and the second <K2, K1> HashMap.

Source

pub fn iter(&self) -> Iter<'_, K1, K2, V>

Iterate through all the values in the MultiMap in random order. Note that the values are (K2, V) tuples, not V, as you would get with a HashMap.

Trait Implementations§

Source§

impl<K1: Eq + Hash + Debug, K2: Eq + Hash + Debug, V: Debug> Debug for MultiMap<K1, K2, V>

Source§

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

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

impl<K1, K2, V> Default for MultiMap<K1, K2, V>
where K1: Eq + Hash + Clone, K2: Eq + Hash + Clone,

Source§

fn default() -> MultiMap<K1, K2, V>

Creates an empty MultiMap<K1, K2, V>

Source§

impl<'a, K1, K2, V> IntoIterator for &'a MultiMap<K1, K2, V>
where K1: Eq + Hash + Debug + Clone, K2: Eq + Hash + Debug + Clone, V: Debug,

Source§

type Item = (&'a K1, &'a (K2, V))

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, K1, K2, V>

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

fn into_iter(self) -> Iter<'a, K1, K2, V>

Creates an iterator from a value. Read more
Source§

impl<K1, K2, V> IntoIterator for MultiMap<K1, K2, V>
where K1: Eq + Hash + Debug, K2: Eq + Hash + Debug, V: Debug,

Source§

fn into_iter(self) -> IntoIter<K1, K2, V>

Creates a consuming iterator, that is, one that moves each key-value pair out of the map in arbitrary order. The map cannot be used after calling this.

Source§

type Item = (K1, (K2, V))

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<K1, K2, V>

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

impl<K1: Eq + Hash, K2: Eq + Hash, V: Eq> PartialEq for MultiMap<K1, K2, V>

Source§

fn eq(&self, other: &MultiMap<K1, K2, V>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<K1: Eq + Eq + Hash, K2: Eq + Eq + Hash, V: Eq> Eq for MultiMap<K1, K2, V>

Auto Trait Implementations§

§

impl<K1, K2, V> Freeze for MultiMap<K1, K2, V>

§

impl<K1, K2, V> RefUnwindSafe for MultiMap<K1, K2, V>

§

impl<K1, K2, V> Send for MultiMap<K1, K2, V>
where K1: Send, K2: Send, V: Send,

§

impl<K1, K2, V> Sync for MultiMap<K1, K2, V>
where K1: Sync, K2: Sync, V: Sync,

§

impl<K1, K2, V> Unpin for MultiMap<K1, K2, V>
where K1: Unpin, K2: Unpin, V: Unpin,

§

impl<K1, K2, V> UnwindSafe for MultiMap<K1, K2, V>
where K1: UnwindSafe, K2: 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.