[−][src]Struct bidir_map::BidirMap
A bidirectional map.
Bidirectional maps allow for mapping from and to both types.
The interface is based on that of BTreeMap
, except, that for all functions, where one would supply a key, there are two functions,
each treating one of the types as keys (get()
-> get_by_{first,second}()
).
Performance: O(n)
, mostly.
Methods
impl<Kv1: PartialEq, Kv2: PartialEq> BidirMap<Kv1, Kv2>
[src]
impl<Kv1: PartialEq, Kv2: PartialEq> BidirMap<Kv1, Kv2>
pub fn new() -> Self
[src]
pub fn new() -> Self
Create a new empty instance of BidirMap
pub fn with_capacity(capacity: usize) -> Self
[src]
pub fn with_capacity(capacity: usize) -> Self
Create a new empty instance of BidirMap
with the specified capacity.
It will be able to hold at least capacity
elements without reallocating.
pub fn clear(&mut self)
[src]
pub fn clear(&mut self)
Clears the map, removing all entries.
Examples
use bidir_map::BidirMap; let mut a = BidirMap::new(); a.insert(1, "a"); a.clear(); assert!(a.is_empty());
pub fn insert(&mut self, kv1: Kv1, kv2: Kv2) -> Option<(Kv1, Kv2)>
[src]
pub fn insert(&mut self, kv1: Kv1, kv2: Kv2) -> Option<(Kv1, Kv2)>
Inserts a K/V-K/V pair into the map.
If the map did not have this K/V-K/V pair present, None
is returned.
If the map did have this K/V-K/V pair present, it's updated and the old K/V-K/V pair is returned.
ⓘImportant traits for Iter<'a, Kv1, Kv2>pub fn iter(&self) -> Iter<Kv1, Kv2>
[src]
pub fn iter(&self) -> Iter<Kv1, Kv2>
Gets an iterator over the entries of the map.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); map.insert(2, "b"); map.insert(3, "c"); for kv in map.iter() { println!("{}: {}", kv.0, kv.1); } let first = map.iter().next().unwrap(); assert_eq!(first, (&1, &"a"));
ⓘImportant traits for IterMut<'a, Kv1, Kv2>pub fn iter_mut(&mut self) -> IterMut<Kv1, Kv2>
[src]
pub fn iter_mut(&mut self) -> IterMut<Kv1, Kv2>
Gets a mutable iterator over the entries of the map.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert("a", 1); map.insert("b", 2); map.insert("c", 3); // add 10 to the value if the key isn't "a" for kv in map.iter_mut() { if *kv.0 != "a" { *kv.1 += 10; } }
ⓘImportant traits for FirstColumn<'a, Kv1, Kv2>pub fn first_col(&self) -> FirstColumn<Kv1, Kv2>
[src]
pub fn first_col(&self) -> FirstColumn<Kv1, Kv2>
Gets an iterator over the first K/V of the map.
Examples
use bidir_map::BidirMap; let mut a = BidirMap::new(); a.insert(1, "a"); a.insert(2, "b"); let keys: Vec<_> = a.first_col().cloned().collect(); assert_eq!(keys, [1, 2]);
ⓘImportant traits for SecondColumn<'a, Kv1, Kv2>pub fn second_col(&self) -> SecondColumn<Kv1, Kv2>
[src]
pub fn second_col(&self) -> SecondColumn<Kv1, Kv2>
Gets an iterator over the second K/V of the map.
Examples
use bidir_map::BidirMap; let mut a = BidirMap::new(); a.insert(1, "a"); a.insert(2, "b"); let keys: Vec<_> = a.second_col().cloned().collect(); assert_eq!(keys, ["a", "b"]);
pub fn len(&self) -> usize
[src]
pub fn len(&self) -> usize
Returns the number of elements in the map.
Examples
use bidir_map::BidirMap; let mut a = BidirMap::new(); assert_eq!(a.len(), 0); a.insert(1, "a"); assert_eq!(a.len(), 1);
pub fn is_empty(&self) -> bool
[src]
pub fn is_empty(&self) -> bool
Returns true if the map contains no elements.
Examples
use bidir_map::BidirMap; let mut a = BidirMap::new(); assert!(a.is_empty()); a.insert(1, "a"); assert!(!a.is_empty());
pub fn get_by_first<Q: ?Sized>(&self, key: &Q) -> Option<&Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
pub fn get_by_first<Q: ?Sized>(&self, key: &Q) -> Option<&Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
Returns a reference to the second K/V corresponding to the first K/V.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.get_by_first(&1), Some(&"a")); assert_eq!(map.get_by_first(&2), None);
pub fn get_by_second<Q: ?Sized>(&self, key: &Q) -> Option<&Kv1> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
pub fn get_by_second<Q: ?Sized>(&self, key: &Q) -> Option<&Kv1> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
Returns a reference to the first K/V corresponding to the second K/V.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.get_by_second(&"a"), Some(&1)); assert_eq!(map.get_by_second(&"b"), None);
pub fn contains_first_key<Q: ?Sized>(&self, key: &Q) -> bool where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
pub fn contains_first_key<Q: ?Sized>(&self, key: &Q) -> bool where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
Check if the map contains the first K/V
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.contains_first_key(&1), true); assert_eq!(map.contains_first_key(&2), false);
pub fn contains_second_key<Q: ?Sized>(&self, key: &Q) -> bool where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
pub fn contains_second_key<Q: ?Sized>(&self, key: &Q) -> bool where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
Check if the map contains the second K/V
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.contains_second_key(&"a"), true); assert_eq!(map.contains_second_key(&"b"), false);
pub fn get_mut_by_first<Q: ?Sized>(&mut self, key: &Q) -> Option<&mut Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
pub fn get_mut_by_first<Q: ?Sized>(&mut self, key: &Q) -> Option<&mut Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
Returns a mutable reference to the second K/V corresponding to the first K/V.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); if let Some(x) = map.get_mut_by_first(&1) { *x = "b"; } assert_eq!(map.get_by_first(&1), Some(&"b"));
pub fn get_mut_by_second<Q: ?Sized>(&mut self, key: &Q) -> Option<&mut Kv1> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
pub fn get_mut_by_second<Q: ?Sized>(&mut self, key: &Q) -> Option<&mut Kv1> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
Returns a mutable reference to the first K/V corresponding to the second K/V.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); if let Some(x) = map.get_mut_by_second(&"a") { *x = 2; } assert_eq!(map.get_by_second(&"a"), Some(&2));
pub fn remove_by_first<Q: ?Sized>(&mut self, key: &Q) -> Option<(Kv1, Kv2)> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
pub fn remove_by_first<Q: ?Sized>(&mut self, key: &Q) -> Option<(Kv1, Kv2)> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
Removes the pair corresponding to the first K/V from the map, returning it if the key was previously in the map.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.remove_by_first(&1), Some((1, "a"))); assert_eq!(map.remove_by_first(&1), None);
pub fn remove_by_second<Q: ?Sized>(&mut self, key: &Q) -> Option<(Kv1, Kv2)> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
pub fn remove_by_second<Q: ?Sized>(&mut self, key: &Q) -> Option<(Kv1, Kv2)> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
Removes the pair corresponding to the first K/V from the map, returning it if the key was previously in the map.
Examples
use bidir_map::BidirMap; let mut map = BidirMap::new(); map.insert(1, "a"); assert_eq!(map.remove_by_second(&"a"), Some((1, "a"))); assert_eq!(map.remove_by_second(&"b"), None);
Trait Implementations
impl<Kv1: Clone + PartialEq, Kv2: Clone + PartialEq> Clone for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: Clone + PartialEq, Kv2: Clone + PartialEq> Clone for BidirMap<Kv1, Kv2>
fn clone(&self) -> BidirMap<Kv1, Kv2>
[src]
fn clone(&self) -> BidirMap<Kv1, Kv2>
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl<Kv1: PartialEq, Kv2: PartialEq> Extend<(Kv1, Kv2)> for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: PartialEq, Kv2: PartialEq> Extend<(Kv1, Kv2)> for BidirMap<Kv1, Kv2>
fn extend<T: IntoIterator<Item = (Kv1, Kv2)>>(&mut self, iter: T)
[src]
fn extend<T: IntoIterator<Item = (Kv1, Kv2)>>(&mut self, iter: T)
Extends a collection with the contents of an iterator. Read more
impl<Kv1: Eq + PartialEq, Kv2: Eq + PartialEq> Eq for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: Eq + PartialEq, Kv2: Eq + PartialEq> Eq for BidirMap<Kv1, Kv2>
impl<Kv1: Default + PartialEq, Kv2: Default + PartialEq> Default for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: Default + PartialEq, Kv2: Default + PartialEq> Default for BidirMap<Kv1, Kv2>
impl<Kv1: PartialEq + PartialEq, Kv2: PartialEq + PartialEq> PartialEq<BidirMap<Kv1, Kv2>> for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: PartialEq + PartialEq, Kv2: PartialEq + PartialEq> PartialEq<BidirMap<Kv1, Kv2>> for BidirMap<Kv1, Kv2>
fn eq(&self, other: &BidirMap<Kv1, Kv2>) -> bool
[src]
fn eq(&self, other: &BidirMap<Kv1, Kv2>) -> bool
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &BidirMap<Kv1, Kv2>) -> bool
[src]
fn ne(&self, other: &BidirMap<Kv1, Kv2>) -> bool
This method tests for !=
.
impl<Kv1: PartialEq, Kv2: PartialEq> IntoIterator for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: PartialEq, Kv2: PartialEq> IntoIterator for BidirMap<Kv1, Kv2>
type Item = (Kv1, Kv2)
The type of the elements being iterated over.
type IntoIter = IntoIter<Self::Item>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
fn into_iter(self) -> Self::IntoIter
Creates an iterator from a value. Read more
impl<Kv1: Hash + PartialEq, Kv2: Hash + PartialEq> Hash for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: Hash + PartialEq, Kv2: Hash + PartialEq> Hash for BidirMap<Kv1, Kv2>
fn hash<__HKv1Kv2: Hasher>(&self, state: &mut __HKv1Kv2)
[src]
fn hash<__HKv1Kv2: Hasher>(&self, state: &mut __HKv1Kv2)
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl<Kv1: Debug + PartialEq, Kv2: Debug + PartialEq> Debug for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: Debug + PartialEq, Kv2: Debug + PartialEq> Debug for BidirMap<Kv1, Kv2>
fn fmt(&self, f: &mut Formatter) -> Result
[src]
fn fmt(&self, f: &mut Formatter) -> Result
Formats the value using the given formatter. Read more
impl<'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<ByFirst<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
impl<'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<ByFirst<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
type Output = Kv2
The returned type after indexing.
fn index(&self, key: ByFirst<Q>) -> &Self::Output
[src]
fn index(&self, key: ByFirst<Q>) -> &Self::Output
Performs the indexing (container[index]
) operation.
impl<'a, 'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<&'a ByFirst<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
[src]
impl<'a, 'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<&'a ByFirst<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv1: Borrow<Q>,
Q: PartialEq<Kv1>,
type Output = Kv2
The returned type after indexing.
fn index(&self, key: &ByFirst<Q>) -> &Self::Output
[src]
fn index(&self, key: &ByFirst<Q>) -> &Self::Output
Performs the indexing (container[index]
) operation.
impl<'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<BySecond<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
impl<'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<BySecond<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
type Output = Kv1
The returned type after indexing.
fn index(&self, key: BySecond<Q>) -> &Self::Output
[src]
fn index(&self, key: BySecond<Q>) -> &Self::Output
Performs the indexing (container[index]
) operation.
impl<'a, 'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<&'a BySecond<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
[src]
impl<'a, 'q, Kv1: PartialEq, Kv2: PartialEq, Q: ?Sized + 'q> Index<&'a BySecond<'q, Q>> for BidirMap<Kv1, Kv2> where
Kv2: Borrow<Q>,
Q: PartialEq<Kv2>,
type Output = Kv1
The returned type after indexing.
fn index(&self, key: &BySecond<Q>) -> &Self::Output
[src]
fn index(&self, key: &BySecond<Q>) -> &Self::Output
Performs the indexing (container[index]
) operation.
impl<Kv1: PartialEq, Kv2: PartialEq> FromIterator<(Kv1, Kv2)> for BidirMap<Kv1, Kv2>
[src]
impl<Kv1: PartialEq, Kv2: PartialEq> FromIterator<(Kv1, Kv2)> for BidirMap<Kv1, Kv2>
Auto Trait Implementations
impl<Kv1, Kv2> Send for BidirMap<Kv1, Kv2> where
Kv1: Send,
Kv2: Send,
impl<Kv1, Kv2> Send for BidirMap<Kv1, Kv2> where
Kv1: Send,
Kv2: Send,
impl<Kv1, Kv2> Sync for BidirMap<Kv1, Kv2> where
Kv1: Sync,
Kv2: Sync,
impl<Kv1, Kv2> Sync for BidirMap<Kv1, Kv2> where
Kv1: Sync,
Kv2: Sync,
Blanket Implementations
impl<T> From for T
[src]
impl<T> From for T
impl<T, U> Into for T where
U: From<T>,
[src]
impl<T, U> Into for T where
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
type Owned = T
fn to_owned(&self) -> T
[src]
fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
fn clone_into(&self, target: &mut T)
[src]
fn clone_into(&self, target: &mut T)
🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more
impl<I> IntoIterator for I where
I: Iterator,
[src]
impl<I> IntoIterator for I where
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
fn into_iter(self) -> I
[src]
fn into_iter(self) -> I
Creates an iterator from a value. Read more
impl<T, U> TryFrom for T where
T: From<U>,
[src]
impl<T, U> TryFrom for T where
T: From<U>,
type Error = !
try_from
)The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
try_from
)Performs the conversion.
impl<T> Borrow for T where
T: ?Sized,
[src]
impl<T> Borrow for T where
T: ?Sized,
impl<T> BorrowMut for T where
T: ?Sized,
[src]
impl<T> BorrowMut for T where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T, U> TryInto for T where
U: TryFrom<T>,
[src]
impl<T, U> TryInto for T where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
try_from
)The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
try_from
)Performs the conversion.
impl<T> Any for T where
T: 'static + ?Sized,
[src]
impl<T> Any for T where
T: 'static + ?Sized,
fn get_type_id(&self) -> TypeId
[src]
fn get_type_id(&self) -> TypeId
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
Gets the TypeId
of self
. Read more