[][src]Struct im_rc::OrdSet

pub struct OrdSet<A> { /* fields omitted */ }

An ordered set.

An immutable ordered set implemented as a [B-tree] 1.

Most operations on this type of set are O(log n). A HashSet is usually a better choice for performance, but the OrdSet has the advantage of only requiring an Ord constraint on its values, and of being ordered, so values always come out from lowest to highest, where a HashSet has no guaranteed ordering.

Methods

impl<A> OrdSet<A>[src]

#[must_use]
pub fn new() -> Self
[src]

Construct an empty set.

#[must_use]
pub fn unit(a: A) -> Self
[src]

Construct a set with a single value.

Examples

let set = OrdSet::unit(123);
assert!(set.contains(&123));

#[must_use]
pub fn is_empty(&self) -> bool
[src]

Test whether a set is empty.

Time: O(1)

Examples

assert!(
  !ordset![1, 2, 3].is_empty()
);
assert!(
  OrdSet::<i32>::new().is_empty()
);

#[must_use]
pub fn len(&self) -> usize
[src]

Get the size of a set.

Time: O(1)

Examples

assert_eq!(3, ordset![1, 2, 3].len());

pub fn clear(&mut self)[src]

Discard all elements from the set.

This leaves you with an empty set, and all elements that were previously inside it are dropped.

Time: O(n)

Examples

let mut set = ordset![1, 2, 3];
set.clear();
assert!(set.is_empty());

impl<A> OrdSet<A> where
    A: Ord
[src]

#[must_use]
pub fn get_min(&self) -> Option<&A>
[src]

Get the smallest value in a set.

If the set is empty, returns None.

Time: O(log n)

#[must_use]
pub fn get_max(&self) -> Option<&A>
[src]

Get the largest value in a set.

If the set is empty, returns None.

Time: O(log n)

Important traits for Iter<'a, A>
#[must_use]
pub fn iter(&self) -> Iter<A>
[src]

Important traits for RangedIter<'a, A>
#[must_use]
pub fn range<R, BA: ?Sized>(&self, range: R) -> RangedIter<A> where
    R: RangeBounds<BA>,
    A: Borrow<BA>,
    BA: Ord
[src]

Important traits for DiffIter<'a, A>
#[must_use]
pub fn diff<'a>(&'a self, other: &'a Self) -> DiffIter<A>
[src]

Get an iterator over the differences between this set and another, i.e. the set of entries to add or remove to this set in order to make it equal to the other set.

This function will avoid visiting nodes which are shared between the two sets, meaning that even very large sets can be compared quickly if most of their structure is shared.

Time: O(n) (where n is the number of unique elements across the two sets, minus the number of elements belonging to nodes shared between them)

#[must_use]
pub fn contains<BA: ?Sized>(&self, a: &BA) -> bool where
    BA: Ord,
    A: Borrow<BA>, 
[src]

Test if a value is part of a set.

Time: O(log n)

Examples

let mut set = ordset!{1, 2, 3};
assert!(set.contains(&1));
assert!(!set.contains(&4));

#[must_use]
pub fn is_subset<RS>(&self, other: RS) -> bool where
    RS: Borrow<Self>, 
[src]

Test whether a set is a subset of another set, meaning that all values in our set must also be in the other set.

Time: O(n log m) where m is the size of the other set

#[must_use]
pub fn is_proper_subset<RS>(&self, other: RS) -> bool where
    RS: Borrow<Self>, 
[src]

Test whether a set is a proper subset of another set, meaning that all values in our set must also be in the other set. A proper subset must also be smaller than the other set.

Time: O(n log m) where m is the size of the other set

impl<A> OrdSet<A> where
    A: Ord + Clone
[src]

pub fn insert(&mut self, a: A) -> Option<A>[src]

Insert a value into a set.

Time: O(log n)

Examples

let mut set = ordset!{};
set.insert(123);
set.insert(456);
assert_eq!(
  set,
  ordset![123, 456]
);

pub fn remove<BA: ?Sized>(&mut self, a: &BA) -> Option<A> where
    BA: Ord,
    A: Borrow<BA>, 
[src]

Remove a value from a set.

Time: O(log n)

pub fn remove_min(&mut self) -> Option<A>[src]

Remove the smallest value from a set.

Time: O(log n)

pub fn remove_max(&mut self) -> Option<A>[src]

Remove the largest value from a set.

Time: O(log n)

#[must_use]
pub fn update(&self, a: A) -> Self
[src]

Construct a new set from the current set with the given value added.

Time: O(log n)

Examples

let set = ordset![456];
assert_eq!(
  set.update(123),
  ordset![123, 456]
);

#[must_use]
pub fn without<BA: ?Sized>(&self, a: &BA) -> Self where
    BA: Ord,
    A: Borrow<BA>, 
[src]

Construct a new set with the given value removed if it's in the set.

Time: O(log n)

#[must_use]
pub fn without_min(&self) -> (Option<A>, Self)
[src]

Remove the smallest value from a set, and return that value as well as the updated set.

Time: O(log n)

#[must_use]
pub fn without_max(&self) -> (Option<A>, Self)
[src]

Remove the largest value from a set, and return that value as well as the updated set.

Time: O(log n)

#[must_use]
pub fn union(self, other: Self) -> Self
[src]

Construct the union of two sets.

Time: O(n log n)

Examples

let set1 = ordset!{1, 2};
let set2 = ordset!{2, 3};
let expected = ordset!{1, 2, 3};
assert_eq!(expected, set1.union(set2));

#[must_use]
pub fn unions<I>(i: I) -> Self where
    I: IntoIterator<Item = Self>, 
[src]

Construct the union of multiple sets.

Time: O(n log n)

#[must_use]
pub fn difference(self, other: Self) -> Self
[src]

Construct the symmetric difference between two sets.

This is an alias for the [symmetric_difference][symmetric_difference] method.

Time: O(n log n)

Examples

let set1 = ordset!{1, 2};
let set2 = ordset!{2, 3};
let expected = ordset!{1, 3};
assert_eq!(expected, set1.difference(set2));

#[must_use]
pub fn symmetric_difference(self, other: Self) -> Self
[src]

Construct the symmetric difference between two sets.

Time: O(n log n)

Examples

let set1 = ordset!{1, 2};
let set2 = ordset!{2, 3};
let expected = ordset!{1, 3};
assert_eq!(expected, set1.symmetric_difference(set2));

#[must_use]
pub fn relative_complement(self, other: Self) -> Self
[src]

Construct the relative complement between two sets, that is the set of values in self that do not occur in other.

Time: O(m log n) where m is the size of the other set

Examples

let set1 = ordset!{1, 2};
let set2 = ordset!{2, 3};
let expected = ordset!{1};
assert_eq!(expected, set1.relative_complement(set2));

#[must_use]
pub fn intersection(self, other: Self) -> Self
[src]

Construct the intersection of two sets.

Time: O(n log n)

Examples

let set1 = ordset!{1, 2};
let set2 = ordset!{2, 3};
let expected = ordset!{2};
assert_eq!(expected, set1.intersection(set2));

#[must_use]
pub fn split<BA: ?Sized>(self, split: &BA) -> (Self, Self) where
    BA: Ord,
    A: Borrow<BA>, 
[src]

Split a set into two, with the left hand set containing values which are smaller than split, and the right hand set containing values which are larger than split.

The split value itself is discarded.

Time: O(n)

#[must_use]
pub fn split_member<BA: ?Sized>(self, split: &BA) -> (Self, bool, Self) where
    BA: Ord,
    A: Borrow<BA>, 
[src]

Split a set into two, with the left hand set containing values which are smaller than split, and the right hand set containing values which are larger than split.

Returns a tuple of the two sets and a boolean which is true if the split value existed in the original set, and false otherwise.

Time: O(n)

#[must_use]
pub fn take(&self, n: usize) -> Self
[src]

Construct a set with only the n smallest values from a given set.

Time: O(n)

#[must_use]
pub fn skip(&self, n: usize) -> Self
[src]

Construct a set with the n smallest values removed from a given set.

Time: O(n)

Trait Implementations

impl<A: Ord + Eq> Eq for OrdSet<A>[src]

impl<A: Ord> Ord for OrdSet<A>[src]

fn max(self, other: Self) -> Self1.21.0[src]

Compares and returns the maximum of two values. Read more

fn min(self, other: Self) -> Self1.21.0[src]

Compares and returns the minimum of two values. Read more

fn clamp(self, min: Self, max: Self) -> Self[src]

🔬 This is a nightly-only experimental API. (clamp)

Restrict a value to a certain interval. Read more

impl<A> Clone for OrdSet<A>[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<A: Ord> PartialEq<OrdSet<A>> for OrdSet<A>[src]

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for !=.

impl<A: Ord> PartialOrd<OrdSet<A>> for OrdSet<A>[src]

#[must_use]
fn lt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than (for self and other) and is used by the < operator. Read more

#[must_use]
fn le(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

#[must_use]
fn gt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than (for self and other) and is used by the > operator. Read more

#[must_use]
fn ge(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

impl<'s, 'a, A: ?Sized, OA> From<&'s OrdSet<&'a A>> for OrdSet<OA> where
    A: ToOwned<Owned = OA> + Ord,
    OA: Borrow<A> + Ord + Clone
[src]

impl<'a, A> From<&'a [A]> for OrdSet<A> where
    A: Ord + Clone
[src]

impl<A: Ord + Clone> From<Vec<A>> for OrdSet<A>[src]

impl<'a, A: Ord + Clone> From<&'a Vec<A>> for OrdSet<A>[src]

impl<A: Eq + Hash + Ord + Clone> From<HashSet<A, RandomState>> for OrdSet<A>[src]

impl<'a, A: Eq + Hash + Ord + Clone> From<&'a HashSet<A, RandomState>> for OrdSet<A>[src]

impl<A: Ord + Clone> From<BTreeSet<A>> for OrdSet<A>[src]

impl<'a, A: Ord + Clone> From<&'a BTreeSet<A>> for OrdSet<A>[src]

impl<A: Hash + Eq + Ord + Clone, S: BuildHasher> From<HashSet<A, S>> for OrdSet<A>[src]

impl<'a, A: Hash + Eq + Ord + Clone, S: BuildHasher> From<&'a HashSet<A, S>> for OrdSet<A>[src]

impl<A, S> From<OrdSet<A>> for HashSet<A, S> where
    A: Ord + Hash + Eq + Clone,
    S: BuildHasher + Default
[src]

impl<'a, A, S> From<&'a OrdSet<A>> for HashSet<A, S> where
    A: Ord + Hash + Eq + Clone,
    S: BuildHasher + Default
[src]

impl<A> Default for OrdSet<A>[src]

impl<A, R> Extend<R> for OrdSet<A> where
    A: Ord + Clone + From<R>, 
[src]

impl<'a, A> IntoIterator for &'a OrdSet<A> where
    A: 'a + Ord
[src]

type Item = &'a A

The type of the elements being iterated over.

type IntoIter = Iter<'a, A>

Which kind of iterator are we turning this into?

impl<A> IntoIterator for OrdSet<A> where
    A: Ord + Clone
[src]

type Item = A

The type of the elements being iterated over.

type IntoIter = ConsumingIter<A>

Which kind of iterator are we turning this into?

impl<A: Ord + Debug> Debug for OrdSet<A>[src]

impl<A: Ord + Hash> Hash for OrdSet<A>[src]

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

Feeds a slice of this type into the given [Hasher]. Read more

impl<A: Ord + Clone> Add<OrdSet<A>> for OrdSet<A>[src]

type Output = OrdSet<A>

The resulting type after applying the + operator.

impl<'a, A: Ord + Clone> Add<&'a OrdSet<A>> for &'a OrdSet<A>[src]

type Output = OrdSet<A>

The resulting type after applying the + operator.

impl<A: Ord + Clone> Mul<OrdSet<A>> for OrdSet<A>[src]

type Output = OrdSet<A>

The resulting type after applying the * operator.

impl<'a, A: Ord + Clone> Mul<&'a OrdSet<A>> for &'a OrdSet<A>[src]

type Output = OrdSet<A>

The resulting type after applying the * operator.

impl<A: Ord + Clone> Sum<OrdSet<A>> for OrdSet<A>[src]

impl<A, R> FromIterator<R> for OrdSet<A> where
    A: Ord + Clone + From<R>, 
[src]

Auto Trait Implementations

impl<A> !Send for OrdSet<A>

impl<A> !Sync for OrdSet<A>

Blanket Implementations

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> From<T> for T[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

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?

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Same<T> for T[src]

type Output = T

Should always be Self