Struct bimap::btree::BiBTreeMap
source · pub struct BiBTreeMap<L, R> { /* private fields */ }
Expand description
A bimap backed by two BTreeMap
s.
See the module-level documentation for more details and examples.
Implementations§
source§impl<L, R> BiBTreeMap<L, R>
impl<L, R> BiBTreeMap<L, R>
sourcepub fn new() -> Self
pub fn new() -> Self
Creates an empty BiBTreeMap
.
§Examples
use bimap::BiBTreeMap;
let bimap = BiBTreeMap::<char, i32>::new();
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of left-right pairs in the bimap.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
assert_eq!(bimap.len(), 3);
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if the bimap contains no left-right pairs, and false
otherwise.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
assert!(bimap.is_empty());
bimap.insert('a', 1);
assert!(!bimap.is_empty());
bimap.remove_by_right(&1);
assert!(bimap.is_empty());
sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all left-right pairs from the bimap.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
bimap.clear();
assert!(bimap.len() == 0);
sourcepub fn iter(&self) -> Iter<'_, L, R> ⓘ
pub fn iter(&self) -> Iter<'_, L, R> ⓘ
Creates an iterator over the left-right pairs in the bimap in ascending order by left value.
The iterator element type is (&L, &R)
.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
for (left, right) in bimap.iter() {
println!("({}, {})", left, right);
}
sourcepub fn left_values(&self) -> LeftValues<'_, L, R> ⓘ
pub fn left_values(&self) -> LeftValues<'_, L, R> ⓘ
Creates an iterator over the left values in the bimap in ascending order.
The iterator element type is &L
.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
for char_value in bimap.left_values() {
println!("{}", char_value);
}
sourcepub fn right_values(&self) -> RightValues<'_, L, R> ⓘ
pub fn right_values(&self) -> RightValues<'_, L, R> ⓘ
Creates an iterator over the right values in the bimap in ascending order.
The iterator element type is &R
.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
for int_value in bimap.right_values() {
println!("{}", int_value);
}
sourcepub fn get_by_left<Q>(&self, left: &Q) -> Option<&R>
pub fn get_by_left<Q>(&self, left: &Q) -> Option<&R>
Returns a reference to the right value corresponding to the given left value.
The input may be any borrowed form of the bimap’s left type, but the ordering on the borrowed form must match the ordering on the left type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
assert_eq!(bimap.get_by_left(&'a'), Some(&1));
assert_eq!(bimap.get_by_left(&'z'), None);
sourcepub fn get_by_right<Q>(&self, right: &Q) -> Option<&L>
pub fn get_by_right<Q>(&self, right: &Q) -> Option<&L>
Returns a reference to the left value corresponding to the given right value.
The input may be any borrowed form of the bimap’s right type, but the ordering on the borrowed form must match the ordering on the right type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
assert_eq!(bimap.get_by_right(&1), Some(&'a'));
assert_eq!(bimap.get_by_right(&2), None);
sourcepub fn contains_left<Q>(&self, left: &Q) -> bool
pub fn contains_left<Q>(&self, left: &Q) -> bool
Returns true
if the bimap contains the given left value and false
otherwise.
The input may be any borrowed form of the bimap’s left type, but the ordering on the borrowed form must match the ordering on the left type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
assert!(bimap.contains_left(&'a'));
assert!(!bimap.contains_left(&'b'));
sourcepub fn contains_right<Q>(&self, right: &Q) -> bool
pub fn contains_right<Q>(&self, right: &Q) -> bool
Returns true
if the map contains the given right value and false
otherwise.
The input may be any borrowed form of the bimap’s right type, but the ordering on the borrowed form must match the ordering on the right type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
assert!(bimap.contains_right(&1));
assert!(!bimap.contains_right(&2));
sourcepub fn remove_by_left<Q>(&mut self, left: &Q) -> Option<(L, R)>
pub fn remove_by_left<Q>(&mut self, left: &Q) -> Option<(L, R)>
Removes the left-right pair corresponding to the given left value.
Returns the previous left-right pair if the map contained the left value
and None
otherwise.
The input may be any borrowed form of the bimap’s left type, but the ordering on the borrowed form must match the ordering on the left type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
assert_eq!(bimap.remove_by_left(&'b'), Some(('b', 2)));
assert_eq!(bimap.remove_by_left(&'b'), None);
sourcepub fn remove_by_right<Q>(&mut self, right: &Q) -> Option<(L, R)>
pub fn remove_by_right<Q>(&mut self, right: &Q) -> Option<(L, R)>
Removes the left-right pair corresponding to the given right value.
Returns the previous left-right pair if the map contained the right
value and None
otherwise.
The input may be any borrowed form of the bimap’s right type, but the ordering on the borrowed form must match the ordering on the right type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
assert_eq!(bimap.remove_by_right(&2), Some(('b', 2)));
assert_eq!(bimap.remove_by_right(&2), None);
sourcepub fn retain<F>(&mut self, f: F)
pub fn retain<F>(&mut self, f: F)
Retains only elements specified by a predicate
In other words, remove all left-right pairs (l, r)
such that f(&l, &r)
returns false
.
§Example
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
bimap.retain(|&l, _| l != 'b');
assert_eq!(bimap.len(), 2);
assert_eq!(bimap.get_by_right(&1), Some(&'a'));
assert_eq!(bimap.get_by_right(&2), None);
assert_eq!(bimap.get_by_right(&3), Some(&'c'));
sourcepub fn insert(&mut self, left: L, right: R) -> Overwritten<L, R>
pub fn insert(&mut self, left: L, right: R) -> Overwritten<L, R>
Inserts the given left-right pair into the bimap.
Returns an enum Overwritten
representing any left-right pairs that
were overwritten by the call to insert
. The example below details
all possible enum variants that can be returned.
§Warnings
Somewhat paradoxically, calling insert()
can actually reduce the size
of the bimap! This is because of the invariant that each left value
maps to exactly one right value and vice versa.
§Examples
use bimap::{BiBTreeMap, Overwritten};
let mut bimap = BiBTreeMap::new();
assert_eq!(bimap.len(), 0); // {}
// no values are overwritten.
assert_eq!(bimap.insert('a', 1), Overwritten::Neither);
assert_eq!(bimap.len(), 1); // {'a' <> 1}
// no values are overwritten.
assert_eq!(bimap.insert('b', 2), Overwritten::Neither);
assert_eq!(bimap.len(), 2); // {'a' <> 1, 'b' <> 2}
// ('a', 1) already exists, so inserting ('a', 4) overwrites 'a', the left value.
// the previous left-right pair ('a', 1) is returned.
assert_eq!(bimap.insert('a', 4), Overwritten::Left('a', 1));
assert_eq!(bimap.len(), 2); // {'a' <> 4, 'b' <> 2}
// ('b', 2) already exists, so inserting ('c', 2) overwrites 2, the right value.
// the previous left-right pair ('b', 2) is returned.
assert_eq!(bimap.insert('c', 2), Overwritten::Right('b', 2));
assert_eq!(bimap.len(), 2); // {'a' <> 1, 'c' <> 2}
// both ('a', 4) and ('c', 2) already exist, so inserting ('a', 2) overwrites both.
// ('a', 4) has the overwritten left value ('a'), so it's the first tuple returned.
// ('c', 2) has the overwritten right value (2), so it's the second tuple returned.
assert_eq!(bimap.insert('a', 2), Overwritten::Both(('a', 4), ('c', 2)));
assert_eq!(bimap.len(), 1); // {'a' <> 2} // bimap is smaller than before!
// ('a', 2) already exists, so inserting ('a', 2) overwrites the pair.
// the previous left-right pair ('a', 2) is returned.
assert_eq!(bimap.insert('a', 2), Overwritten::Pair('a', 2));
assert_eq!(bimap.len(), 1); // {'a' <> 2}
sourcepub fn insert_no_overwrite(&mut self, left: L, right: R) -> Result<(), (L, R)>
pub fn insert_no_overwrite(&mut self, left: L, right: R) -> Result<(), (L, R)>
Inserts the given left-right pair into the bimap without overwriting any existing values.
Returns Ok(())
if the pair was successfully inserted into the bimap.
If either value exists in the map, Err((left, right)
is returned
with the attempted left-right pair and the map is unchanged.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
assert_eq!(bimap.insert_no_overwrite('a', 1), Ok(()));
assert_eq!(bimap.insert_no_overwrite('b', 2), Ok(()));
assert_eq!(bimap.insert_no_overwrite('a', 3), Err(('a', 3)));
assert_eq!(bimap.insert_no_overwrite('c', 2), Err(('c', 2)));
sourcepub fn left_range<T, A>(&self, range: A) -> LeftRange<'_, L, R> ⓘ
pub fn left_range<T, A>(&self, range: A) -> LeftRange<'_, L, R> ⓘ
Creates an iterator over the left-right pairs lying within a range of left values in the bimap in ascending order by left.
The iterator element type is (&L, &R)
.
The range bounds may be any borrowed form of the bimap’s left type, but the ordering on the borrowed form must match the ordering on the left type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
bimap.insert('d', 4);
for (left, right) in bimap.left_range('b'..'d') {
println!("({}, {})", left, right);
}
sourcepub fn right_range<T, A>(&self, range: A) -> RightRange<'_, L, R> ⓘ
pub fn right_range<T, A>(&self, range: A) -> RightRange<'_, L, R> ⓘ
Creates an iterator over the left-right pairs lying within a range of right values in the bimap in ascending order by right.
The iterator element type is (&L, &R)
.
The range bounds may be any borrowed form of the bimap’s right type, but the ordering on the borrowed form must match the ordering on the right type.
§Examples
use bimap::BiBTreeMap;
let mut bimap = BiBTreeMap::new();
bimap.insert('a', 1);
bimap.insert('b', 2);
bimap.insert('c', 3);
bimap.insert('d', 4);
for (left, right) in bimap.right_range(2..4) {
println!("({}, {})", left, right);
}
Trait Implementations§
source§impl<L, R> Clone for BiBTreeMap<L, R>
impl<L, R> Clone for BiBTreeMap<L, R>
source§fn clone(&self) -> BiBTreeMap<L, R>
fn clone(&self) -> BiBTreeMap<L, R>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<L, R> Debug for BiBTreeMap<L, R>
impl<L, R> Debug for BiBTreeMap<L, R>
source§impl<L, R> Default for BiBTreeMap<L, R>
impl<L, R> Default for BiBTreeMap<L, R>
source§fn default() -> BiBTreeMap<L, R>
fn default() -> BiBTreeMap<L, R>
source§impl<L, R> Extend<(L, R)> for BiBTreeMap<L, R>
impl<L, R> Extend<(L, R)> for BiBTreeMap<L, R>
source§fn extend<T: IntoIterator<Item = (L, R)>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = (L, R)>>(&mut self, iter: T)
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<L, R> FromIterator<(L, R)> for BiBTreeMap<L, R>
impl<L, R> FromIterator<(L, R)> for BiBTreeMap<L, R>
source§fn from_iter<I>(iter: I) -> BiBTreeMap<L, R>where
I: IntoIterator<Item = (L, R)>,
fn from_iter<I>(iter: I) -> BiBTreeMap<L, R>where
I: IntoIterator<Item = (L, R)>,
source§impl<L, R> Hash for BiBTreeMap<L, R>
impl<L, R> Hash for BiBTreeMap<L, R>
source§impl<'a, L, R> IntoIterator for &'a BiBTreeMap<L, R>
impl<'a, L, R> IntoIterator for &'a BiBTreeMap<L, R>
source§impl<L, R> IntoIterator for BiBTreeMap<L, R>
impl<L, R> IntoIterator for BiBTreeMap<L, R>
source§impl<L, R> Ord for BiBTreeMap<L, R>
impl<L, R> Ord for BiBTreeMap<L, R>
source§impl<L, R> PartialEq for BiBTreeMap<L, R>
impl<L, R> PartialEq for BiBTreeMap<L, R>
source§impl<L, R> PartialOrd for BiBTreeMap<L, R>
impl<L, R> PartialOrd for BiBTreeMap<L, R>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more