pub struct MultiSet<E: Ord, C: Count> { /* private fields */ }
Implementations§
Source§impl<E: Ord, C: Count> MultiSet<E, C>
impl<E: Ord, C: Count> MultiSet<E, C>
Sourcepub fn from<I: IntoIterator<Item = (E, C)>>(iter: I) -> Self
pub fn from<I: IntoIterator<Item = (E, C)>>(iter: I) -> Self
Creates a new MultiSet
from an iterator of tuples (elem, elem count).
§Examples
use threshold::*;
let mset = MultiSet::from(vec![(17, 1), (23, 2)]);
assert_eq!(mset.count(&17), 1);
assert_eq!(mset.count(&23), 2);
Sourcepub fn add<I: IntoIterator<Item = (E, C)>>(&mut self, iter: I)
pub fn add<I: IntoIterator<Item = (E, C)>>(&mut self, iter: I)
Adds several elements (each with an associated count) to the MultiSet
.
§Examples
use threshold::*;
let mut mset = MultiSet::new();
assert_eq!(mset.count(&17), 0);
mset.add(vec![(17, 1), (23, 2)]);
assert_eq!(mset.count(&17), 1);
assert_eq!(mset.count(&23), 2);
Sourcepub fn add_elem(&mut self, elem: E, by: C)
pub fn add_elem(&mut self, elem: E, by: C)
Adds a single element (with an associated count) to the MultiSet
.
§Examples
use threshold::*;
let mut mset = MultiSet::new();
assert_eq!(mset.count(&17), 0);
mset.add_elem(17, 2);
assert_eq!(mset.count(&17), 2);
Sourcepub fn count(&self, elem: &E) -> C
pub fn count(&self, elem: &E) -> C
Returns the Count
of an element.
§Examples
use threshold::*;
let mut mset = MultiSet::new();
assert_eq!(mset.count(&17), 0);
mset.add(vec![(17, 1), (23, 1)]);
assert_eq!(mset.count(&17), 1);
assert_eq!(mset.count(&23), 1);
assert_eq!(mset.count(&42), 0);
mset.add(vec![(17, 1), (42, 1)]);
assert_eq!(mset.count(&17), 2);
assert_eq!(mset.count(&23), 1);
assert_eq!(mset.count(&42), 1);
assert_eq!(mset.count(&108), 0);
Sourcepub fn iter(&self) -> impl DoubleEndedIterator<Item = (&E, &C)>
pub fn iter(&self) -> impl DoubleEndedIterator<Item = (&E, &C)>
Returns a sorted (ASC) double ended iterator.
Source§impl<E: Ord> MultiSet<E, u64>
impl<E: Ord> MultiSet<E, u64>
Sourcepub fn threshold(&self, threshold: u64) -> Vec<&E>
pub fn threshold(&self, threshold: u64) -> Vec<&E>
Returns the elements in the MultiSet
such that its multiplicity is
bigger or equal than a given threshold.
§Examples
use threshold::*;
let mut mset = MultiSet::new();
let empty: Vec<&u64> = Vec::new();
assert_eq!(mset.threshold(1), empty);
mset.add(vec![(17, 1), (23, 1)]);
assert_eq!(mset.threshold(1), vec![&17, &23]);
assert_eq!(mset.threshold(2), empty);
mset.add(vec![(17, 1), (42, 3)]);
assert_eq!(mset.threshold(1), vec![&17, &23, &42]);
assert_eq!(mset.threshold(2), vec![&17, &42]);
assert_eq!(mset.threshold(3), vec![&42]);
assert_eq!(mset.threshold(4), empty);
pub fn threshold_iter(&self, threshold: u64) -> impl Iterator<Item = &E>
pub fn elem_count(&self) -> usize
Trait Implementations§
Source§impl<E: Ord, C: Count> IntoIterator for MultiSet<E, C>
impl<E: Ord, C: Count> IntoIterator for MultiSet<E, C>
Source§fn into_iter(self) -> Self::IntoIter
fn into_iter(self) -> Self::IntoIter
Returns a MultiSet
into iterator.
§Examples
use threshold::*;
let elems_count = vec![("A", 2), ("B", 1)];
let mset = MultiSet::from(elems_count);
let mut iter = mset.into_iter();
assert_eq!(Some(("A", 2)), iter.next());
assert_eq!(Some(("B", 1)), iter.next());
assert_eq!(None, iter.next());
impl<E: Eq + Ord, C: Eq + Count> Eq for MultiSet<E, C>
impl<E: Ord, C: Count> StructuralPartialEq for MultiSet<E, C>
Auto Trait Implementations§
impl<E, C> Freeze for MultiSet<E, C>
impl<E, C> RefUnwindSafe for MultiSet<E, C>where
E: RefUnwindSafe,
C: RefUnwindSafe,
impl<E, C> Send for MultiSet<E, C>
impl<E, C> Sync for MultiSet<E, C>
impl<E, C> Unpin for MultiSet<E, C>
impl<E, C> UnwindSafe for MultiSet<E, C>where
E: RefUnwindSafe,
C: RefUnwindSafe,
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
Mutably borrows from an owned value. Read more