Struct BTreeSet

struct BTreeSet<T, A: Allocator + Clone = crate::alloc::Global> { ... }

An ordered set based on a B-Tree.

See BTreeMap's documentation for a detailed discussion of this collection's performance benefits and drawbacks.

It is a logic error for an item to be modified in such a way that the item's ordering relative to any other item, as determined by the Ord trait, changes while it is in the set. This is normally only possible through Cell, RefCell, global state, I/O, or unsafe code. The behavior resulting from such a logic error is not specified, but will be encapsulated to the BTreeSet that observed the logic error and not result in undefined behavior. This could include panics, incorrect results, aborts, memory leaks, and non-termination.

Iterators returned by BTreeSet::iter and BTreeSet::into_iter produce their items in order, and take worst-case logarithmic and amortized constant time per item returned.

Examples

use std::collections::BTreeSet;

// Type inference lets us omit an explicit type signature (which
// would be `BTreeSet<&str>` in this example).
let mut books = BTreeSet::new();

// Add some books.
books.insert("A Dance With Dragons");
books.insert("To Kill a Mockingbird");
books.insert("The Odyssey");
books.insert("The Great Gatsby");

// Check for a specific one.
if !books.contains("The Winds of Winter") {
    println!("We have {} books, but The Winds of Winter ain't one.",
             books.len());
}

// Remove a book.
books.remove("The Odyssey");

// Iterate over everything.
for book in &books {
    println!("{book}");
}

A BTreeSet with a known list of items can be initialized from an array:

use std::collections::BTreeSet;

let set = BTreeSet::from([1, 2, 3]);

Implementations

impl<T> BTreeSet<T>

const fn new() -> BTreeSet<T>

Makes a new, empty BTreeSet.

Does not allocate anything on its own.

Examples

# #![allow(unused_mut)]
use std::collections::BTreeSet;

let mut set: BTreeSet<i32> = BTreeSet::new();

impl<T, A: Allocator + Clone> BTreeSet<T, A>

const fn new_in(alloc: A) -> BTreeSet<T, A>

Makes a new BTreeSet with a reasonable choice of B.

Examples

# #![allow(unused_mut)]
# #![feature(allocator_api)]
# #![feature(btreemap_alloc)]
use std::collections::BTreeSet;
use std::alloc::Global;

let mut set: BTreeSet<i32> = BTreeSet::new_in(Global);
fn range<K, R>(self: &Self, range: R) -> Range<'_, T>
where
    K: Ord + ?Sized,
    T: Borrow<K> + Ord,
    R: RangeBounds<K>

Constructs a double-ended iterator over a sub-range of elements in the set. The simplest way is to use the range syntax min..max, thus range(min..max) will yield elements from min (inclusive) to max (exclusive). The range may also be entered as (Bound<T>, Bound<T>), so for example range((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive range from 4 to 10.

Panics

Panics if range start > end. Panics if range start == end and both bounds are Excluded.

Examples

use std::collections::BTreeSet;
use std::ops::Bound::Included;

let mut set = BTreeSet::new();
set.insert(3);
set.insert(5);
set.insert(8);
for &elem in set.range((Included(&4), Included(&8))) {
    println!("{elem}");
}
assert_eq!(Some(&5), set.range(4..).next());
fn difference<'a>(self: &'a Self, other: &'a BTreeSet<T, A>) -> Difference<'a, T, A>
where
    T: Ord

Visits the elements representing the difference, i.e., the elements that are in self but not in other, in ascending order.

Examples

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);
a.insert(2);

let mut b = BTreeSet::new();
b.insert(2);
b.insert(3);

let diff: Vec<_> = a.difference(&b).cloned().collect();
assert_eq!(diff, [1]);
fn symmetric_difference<'a>(self: &'a Self, other: &'a BTreeSet<T, A>) -> SymmetricDifference<'a, T>
where
    T: Ord

Visits the elements representing the symmetric difference, i.e., the elements that are in self or in other but not in both, in ascending order.

Examples

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);
a.insert(2);

let mut b = BTreeSet::new();
b.insert(2);
b.insert(3);

let sym_diff: Vec<_> = a.symmetric_difference(&b).cloned().collect();
assert_eq!(sym_diff, [1, 3]);
fn intersection<'a>(self: &'a Self, other: &'a BTreeSet<T, A>) -> Intersection<'a, T, A>
where
    T: Ord

Visits the elements representing the intersection, i.e., the elements that are both in self and other, in ascending order.

Examples

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);
a.insert(2);

let mut b = BTreeSet::new();
b.insert(2);
b.insert(3);

let intersection: Vec<_> = a.intersection(&b).cloned().collect();
assert_eq!(intersection, [2]);
fn union<'a>(self: &'a Self, other: &'a BTreeSet<T, A>) -> Union<'a, T>
where
    T: Ord

Visits the elements representing the union, i.e., all the elements in self or other, without duplicates, in ascending order.

Examples

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);

let mut b = BTreeSet::new();
b.insert(2);

let union: Vec<_> = a.union(&b).cloned().collect();
assert_eq!(union, [1, 2]);
fn clear(self: &mut Self)
where
    A: Clone

Clears the set, removing all elements.

Examples

use std::collections::BTreeSet;

let mut v = BTreeSet::new();
v.insert(1);
v.clear();
assert!(v.is_empty());
fn contains<Q>(self: &Self, value: &Q) -> bool
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns true if the set contains an element equal to the value.

The value may be any borrowed form of the set's element type, but the ordering on the borrowed form must match the ordering on the element type.

Examples

use std::collections::BTreeSet;

let set = BTreeSet::from([1, 2, 3]);
assert_eq!(set.contains(&1), true);
assert_eq!(set.contains(&4), false);
fn get<Q>(self: &Self, value: &Q) -> Option<&T>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns a reference to the element in the set, if any, that is equal to the value.

The value may be any borrowed form of the set's element type, but the ordering on the borrowed form must match the ordering on the element type.

Examples

use std::collections::BTreeSet;

let set = BTreeSet::from([1, 2, 3]);
assert_eq!(set.get(&2), Some(&2));
assert_eq!(set.get(&4), None);
fn is_disjoint(self: &Self, other: &BTreeSet<T, A>) -> bool
where
    T: Ord

Returns true if self has no elements in common with other. This is equivalent to checking for an empty intersection.

Examples

use std::collections::BTreeSet;

let a = BTreeSet::from([1, 2, 3]);
let mut b = BTreeSet::new();

assert_eq!(a.is_disjoint(&b), true);
b.insert(4);
assert_eq!(a.is_disjoint(&b), true);
b.insert(1);
assert_eq!(a.is_disjoint(&b), false);
fn is_subset(self: &Self, other: &BTreeSet<T, A>) -> bool
where
    T: Ord

Returns true if the set is a subset of another, i.e., other contains at least all the elements in self.

Examples

use std::collections::BTreeSet;

let sup = BTreeSet::from([1, 2, 3]);
let mut set = BTreeSet::new();

assert_eq!(set.is_subset(&sup), true);
set.insert(2);
assert_eq!(set.is_subset(&sup), true);
set.insert(4);
assert_eq!(set.is_subset(&sup), false);
fn is_superset(self: &Self, other: &BTreeSet<T, A>) -> bool
where
    T: Ord

Returns true if the set is a superset of another, i.e., self contains at least all the elements in other.

Examples

use std::collections::BTreeSet;

let sub = BTreeSet::from([1, 2]);
let mut set = BTreeSet::new();

assert_eq!(set.is_superset(&sub), false);

set.insert(0);
set.insert(1);
assert_eq!(set.is_superset(&sub), false);

set.insert(2);
assert_eq!(set.is_superset(&sub), true);
fn first(self: &Self) -> Option<&T>
where
    T: Ord

Returns a reference to the first element in the set, if any. This element is always the minimum of all elements in the set.

Examples

Basic usage:

use std::collections::BTreeSet;

let mut set = BTreeSet::new();
assert_eq!(set.first(), None);
set.insert(1);
assert_eq!(set.first(), Some(&1));
set.insert(2);
assert_eq!(set.first(), Some(&1));
fn last(self: &Self) -> Option<&T>
where
    T: Ord

Returns a reference to the last element in the set, if any. This element is always the maximum of all elements in the set.

Examples

Basic usage:

use std::collections::BTreeSet;

let mut set = BTreeSet::new();
assert_eq!(set.last(), None);
set.insert(1);
assert_eq!(set.last(), Some(&1));
set.insert(2);
assert_eq!(set.last(), Some(&2));
fn pop_first(self: &mut Self) -> Option<T>
where
    T: Ord

Removes the first element from the set and returns it, if any. The first element is always the minimum element in the set.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::new();

set.insert(1);
while let Some(n) = set.pop_first() {
    assert_eq!(n, 1);
}
assert!(set.is_empty());
fn pop_last(self: &mut Self) -> Option<T>
where
    T: Ord

Removes the last element from the set and returns it, if any. The last element is always the maximum element in the set.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::new();

set.insert(1);
while let Some(n) = set.pop_last() {
    assert_eq!(n, 1);
}
assert!(set.is_empty());
fn insert(self: &mut Self, value: T) -> bool
where
    T: Ord

Adds a value to the set.

Returns whether the value was newly inserted. That is:

  • If the set did not previously contain an equal value, true is returned.
  • If the set already contained an equal value, false is returned, and the entry is not updated.

See the module-level documentation for more.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::new();

assert_eq!(set.insert(2), true);
assert_eq!(set.insert(2), false);
assert_eq!(set.len(), 1);
fn replace(self: &mut Self, value: T) -> Option<T>
where
    T: Ord

Adds a value to the set, replacing the existing element, if any, that is equal to the value. Returns the replaced element.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::new();
set.insert(Vec::<i32>::new());

assert_eq!(set.get(&[][..]).unwrap().capacity(), 0);
set.replace(Vec::with_capacity(10));
assert_eq!(set.get(&[][..]).unwrap().capacity(), 10);
fn get_or_insert(self: &mut Self, value: T) -> &T
where
    T: Ord

Inserts the given value into the set if it is not present, then returns a reference to the value in the set.

Examples

#![feature(btree_set_entry)]

use std::collections::BTreeSet;

let mut set = BTreeSet::from([1, 2, 3]);
assert_eq!(set.len(), 3);
assert_eq!(set.get_or_insert(2), &2);
assert_eq!(set.get_or_insert(100), &100);
assert_eq!(set.len(), 4); // 100 was inserted
fn get_or_insert_with<Q, F>(self: &mut Self, value: &Q, f: F) -> &T
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized,
    F: FnOnce(&Q) -> T

Inserts a value computed from f into the set if the given value is not present, then returns a reference to the value in the set.

Examples

#![feature(btree_set_entry)]

use std::collections::BTreeSet;

let mut set: BTreeSet<String> = ["cat", "dog", "horse"]
    .iter().map(|&pet| pet.to_owned()).collect();

assert_eq!(set.len(), 3);
for &pet in &["cat", "dog", "fish"] {
    let value = set.get_or_insert_with(pet, str::to_owned);
    assert_eq!(value, pet);
}
assert_eq!(set.len(), 4); // a new "fish" was inserted
fn entry(self: &mut Self, value: T) -> Entry<'_, T, A>
where
    T: Ord

Gets the given value's corresponding entry in the set for in-place manipulation.

Examples

#![feature(btree_set_entry)]

use std::collections::BTreeSet;
use std::collections::btree_set::Entry::*;

let mut singles = BTreeSet::new();
let mut dupes = BTreeSet::new();

for ch in "a short treatise on fungi".chars() {
    if let Vacant(dupe_entry) = dupes.entry(ch) {
        // We haven't already seen a duplicate, so
        // check if we've at least seen it once.
        match singles.entry(ch) {
            Vacant(single_entry) => {
                // We found a new character for the first time.
                single_entry.insert()
            }
            Occupied(single_entry) => {
                // We've already seen this once, "move" it to dupes.
                single_entry.remove();
                dupe_entry.insert();
            }
        }
    }
}

assert!(!singles.contains(&'t') && dupes.contains(&'t'));
assert!(singles.contains(&'u') && !dupes.contains(&'u'));
assert!(!singles.contains(&'v') && !dupes.contains(&'v'));
fn remove<Q>(self: &mut Self, value: &Q) -> bool
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

If the set contains an element equal to the value, removes it from the set and drops it. Returns whether such an element was present.

The value may be any borrowed form of the set's element type, but the ordering on the borrowed form must match the ordering on the element type.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::new();

set.insert(2);
assert_eq!(set.remove(&2), true);
assert_eq!(set.remove(&2), false);
fn take<Q>(self: &mut Self, value: &Q) -> Option<T>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Removes and returns the element in the set, if any, that is equal to the value.

The value may be any borrowed form of the set's element type, but the ordering on the borrowed form must match the ordering on the element type.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::from([1, 2, 3]);
assert_eq!(set.take(&2), Some(2));
assert_eq!(set.take(&2), None);
fn retain<F>(self: &mut Self, f: F)
where
    T: Ord,
    F: FnMut(&T) -> bool

Retains only the elements specified by the predicate.

In other words, remove all elements e for which f(&e) returns false. The elements are visited in ascending order.

Examples

use std::collections::BTreeSet;

let mut set = BTreeSet::from([1, 2, 3, 4, 5, 6]);
// Keep only the even numbers.
set.retain(|&k| k % 2 == 0);
assert!(set.iter().eq([2, 4, 6].iter()));
fn append(self: &mut Self, other: &mut Self)
where
    T: Ord,
    A: Clone

Moves all elements from other into self, leaving other empty.

Examples

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);
a.insert(2);
a.insert(3);

let mut b = BTreeSet::new();
b.insert(3);
b.insert(4);
b.insert(5);

a.append(&mut b);

assert_eq!(a.len(), 5);
assert_eq!(b.len(), 0);

assert!(a.contains(&1));
assert!(a.contains(&2));
assert!(a.contains(&3));
assert!(a.contains(&4));
assert!(a.contains(&5));
fn split_off<Q: ?Sized + Ord>(self: &mut Self, value: &Q) -> Self
where
    T: Borrow<Q> + Ord,
    A: Clone

Splits the collection into two at the value. Returns a new collection with all elements greater than or equal to the value.

Examples

Basic usage:

use std::collections::BTreeSet;

let mut a = BTreeSet::new();
a.insert(1);
a.insert(2);
a.insert(3);
a.insert(17);
a.insert(41);

let b = a.split_off(&3);

assert_eq!(a.len(), 2);
assert_eq!(b.len(), 3);

assert!(a.contains(&1));
assert!(a.contains(&2));

assert!(b.contains(&3));
assert!(b.contains(&17));
assert!(b.contains(&41));
fn extract_if<F, R>(self: &mut Self, range: R, pred: F) -> ExtractIf<'_, T, R, F, A>
where
    T: Ord,
    R: RangeBounds<T>,
    F: FnMut(&T) -> bool

Creates an iterator that visits elements in the specified range in ascending order and uses a closure to determine if an element should be removed.

If the closure returns true, the element is removed from the set and yielded. If the closure returns false, or panics, the element remains in the set and will not be yielded.

If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating or the iteration short-circuits, then the remaining elements will be retained. Use extract_if().for_each(drop) if you do not need the returned iterator, or retain with a negated predicate if you also do not need to restrict the range.

Examples

use std::collections::BTreeSet;

// Splitting a set into even and odd values, reusing the original set:
let mut set: BTreeSet<i32> = (0..8).collect();
let evens: BTreeSet<_> = set.extract_if(.., |v| v % 2 == 0).collect();
let odds = set;
assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![0, 2, 4, 6]);
assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 7]);

// Splitting a set into low and high halves, reusing the original set:
let mut set: BTreeSet<i32> = (0..8).collect();
let low: BTreeSet<_> = set.extract_if(0..4, |_v| true).collect();
let high = set;
assert_eq!(low.into_iter().collect::<Vec<_>>(), [0, 1, 2, 3]);
assert_eq!(high.into_iter().collect::<Vec<_>>(), [4, 5, 6, 7]);
fn iter(self: &Self) -> Iter<'_, T>

Gets an iterator that visits the elements in the BTreeSet in ascending order.

Examples

use std::collections::BTreeSet;

let set = BTreeSet::from([3, 1, 2]);
let mut set_iter = set.iter();
assert_eq!(set_iter.next(), Some(&1));
assert_eq!(set_iter.next(), Some(&2));
assert_eq!(set_iter.next(), Some(&3));
assert_eq!(set_iter.next(), None);
const fn len(self: &Self) -> usize

Returns the number of elements in the set.

Examples

use std::collections::BTreeSet;

let mut v = BTreeSet::new();
assert_eq!(v.len(), 0);
v.insert(1);
assert_eq!(v.len(), 1);
const fn is_empty(self: &Self) -> bool

Returns true if the set contains no elements.

Examples

use std::collections::BTreeSet;

let mut v = BTreeSet::new();
assert!(v.is_empty());
v.insert(1);
assert!(!v.is_empty());
fn lower_bound<Q>(self: &Self, bound: Bound<&Q>) -> Cursor<'_, T>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns a Cursor pointing at the gap before the smallest element greater than the given bound.

Passing Bound::Included(x) will return a cursor pointing to the gap before the smallest element greater than or equal to x.

Passing Bound::Excluded(x) will return a cursor pointing to the gap before the smallest element greater than x.

Passing Bound::Unbounded will return a cursor pointing to the gap before the smallest element in the set.

Examples

#![feature(btree_cursors)]

use std::collections::BTreeSet;
use std::ops::Bound;

let set = BTreeSet::from([1, 2, 3, 4]);

let cursor = set.lower_bound(Bound::Included(&2));
assert_eq!(cursor.peek_prev(), Some(&1));
assert_eq!(cursor.peek_next(), Some(&2));

let cursor = set.lower_bound(Bound::Excluded(&2));
assert_eq!(cursor.peek_prev(), Some(&2));
assert_eq!(cursor.peek_next(), Some(&3));

let cursor = set.lower_bound(Bound::Unbounded);
assert_eq!(cursor.peek_prev(), None);
assert_eq!(cursor.peek_next(), Some(&1));
fn lower_bound_mut<Q>(self: &mut Self, bound: Bound<&Q>) -> CursorMut<'_, T, A>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns a CursorMut pointing at the gap before the smallest element greater than the given bound.

Passing Bound::Included(x) will return a cursor pointing to the gap before the smallest element greater than or equal to x.

Passing Bound::Excluded(x) will return a cursor pointing to the gap before the smallest element greater than x.

Passing Bound::Unbounded will return a cursor pointing to the gap before the smallest element in the set.

Examples

#![feature(btree_cursors)]

use std::collections::BTreeSet;
use std::ops::Bound;

let mut set = BTreeSet::from([1, 2, 3, 4]);

let mut cursor = set.lower_bound_mut(Bound::Included(&2));
assert_eq!(cursor.peek_prev(), Some(&1));
assert_eq!(cursor.peek_next(), Some(&2));

let mut cursor = set.lower_bound_mut(Bound::Excluded(&2));
assert_eq!(cursor.peek_prev(), Some(&2));
assert_eq!(cursor.peek_next(), Some(&3));

let mut cursor = set.lower_bound_mut(Bound::Unbounded);
assert_eq!(cursor.peek_prev(), None);
assert_eq!(cursor.peek_next(), Some(&1));
fn upper_bound<Q>(self: &Self, bound: Bound<&Q>) -> Cursor<'_, T>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns a Cursor pointing at the gap after the greatest element smaller than the given bound.

Passing Bound::Included(x) will return a cursor pointing to the gap after the greatest element smaller than or equal to x.

Passing Bound::Excluded(x) will return a cursor pointing to the gap after the greatest element smaller than x.

Passing Bound::Unbounded will return a cursor pointing to the gap after the greatest element in the set.

Examples

#![feature(btree_cursors)]

use std::collections::BTreeSet;
use std::ops::Bound;

let set = BTreeSet::from([1, 2, 3, 4]);

let cursor = set.upper_bound(Bound::Included(&3));
assert_eq!(cursor.peek_prev(), Some(&3));
assert_eq!(cursor.peek_next(), Some(&4));

let cursor = set.upper_bound(Bound::Excluded(&3));
assert_eq!(cursor.peek_prev(), Some(&2));
assert_eq!(cursor.peek_next(), Some(&3));

let cursor = set.upper_bound(Bound::Unbounded);
assert_eq!(cursor.peek_prev(), Some(&4));
assert_eq!(cursor.peek_next(), None);
fn upper_bound_mut<Q>(self: &mut Self, bound: Bound<&Q>) -> CursorMut<'_, T, A>
where
    T: Borrow<Q> + Ord,
    Q: Ord + ?Sized

Returns a CursorMut pointing at the gap after the greatest element smaller than the given bound.

Passing Bound::Included(x) will return a cursor pointing to the gap after the greatest element smaller than or equal to x.

Passing Bound::Excluded(x) will return a cursor pointing to the gap after the greatest element smaller than x.

Passing Bound::Unbounded will return a cursor pointing to the gap after the greatest element in the set.

Examples

#![feature(btree_cursors)]

use std::collections::BTreeSet;
use std::ops::Bound;

let mut set = BTreeSet::from([1, 2, 3, 4]);

let mut cursor = set.upper_bound_mut(Bound::Included(&3));
assert_eq!(cursor.peek_prev(), Some(&3));
assert_eq!(cursor.peek_next(), Some(&4));

let mut cursor = set.upper_bound_mut(Bound::Excluded(&3));
assert_eq!(cursor.peek_prev(), Some(&2));
assert_eq!(cursor.peek_next(), Some(&3));

let mut cursor = set.upper_bound_mut(Bound::Unbounded);
assert_eq!(cursor.peek_prev(), Some(&4));
assert_eq!(cursor.peek_next(), None);

impl<'a, T: 'a + Ord + Copy, A: Allocator + Clone> Extend for BTreeSet<T, A>

fn extend<I: IntoIterator<Item = &'a T>>(self: &mut Self, iter: I)
fn extend_one(self: &mut Self, elem: &'a T)

impl<T> Any for BTreeSet<T, A>

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for BTreeSet<T, A>

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for BTreeSet<T, A>

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> CloneToUninit for BTreeSet<T, A>

unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)

impl<T> Default for BTreeSet<T>

fn default() -> BTreeSet<T>

Creates an empty BTreeSet.

impl<T> From for BTreeSet<T, A>

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for BTreeSet<T, A>

fn to_owned(self: &Self) -> T
fn clone_into(self: &Self, target: &mut T)

impl<T, A> Freeze for BTreeSet<T, A>

impl<T, A> RefUnwindSafe for BTreeSet<T, A>

impl<T, A> Send for BTreeSet<T, A>

impl<T, A> Sync for BTreeSet<T, A>

impl<T, A> Unpin for BTreeSet<T, A>

impl<T, A> UnsafeUnpin for BTreeSet<T, A>

impl<T, A> UnwindSafe for BTreeSet<T, A>

impl<T, A: Allocator + Clone> IntoIterator for BTreeSet<T, A>

fn into_iter(self: Self) -> IntoIter<T, A>

Gets an iterator for moving out the BTreeSet's contents in ascending order.

Examples

use std::collections::BTreeSet;

let set = BTreeSet::from([1, 2, 3, 4]);

let v: Vec<_> = set.into_iter().collect();
assert_eq!(v, [1, 2, 3, 4]);

impl<T, U> Into for BTreeSet<T, A>

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for BTreeSet<T, A>

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for BTreeSet<T, A>

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>

impl<T: Clone, A: Allocator + Clone> Clone for BTreeSet<T, A>

fn clone(self: &Self) -> Self
fn clone_from(self: &mut Self, source: &Self)

impl<T: Debug, A: Allocator + Clone> Debug for BTreeSet<T, A>

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

impl<T: Eq, A: Allocator + Clone> Eq for BTreeSet<T, A>

impl<T: Hash, A: Allocator + Clone> Hash for BTreeSet<T, A>

fn hash<H: Hasher>(self: &Self, state: &mut H)

impl<T: Ord> FromIterator for BTreeSet<T>

fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> BTreeSet<T>

impl<T: Ord, A: Allocator + Clone> Extend for BTreeSet<T, A>

fn extend<Iter: IntoIterator<Item = T>>(self: &mut Self, iter: Iter)
fn extend_one(self: &mut Self, elem: T)

impl<T: Ord, A: Allocator + Clone> Ord for BTreeSet<T, A>

fn cmp(self: &Self, other: &BTreeSet<T, A>) -> Ordering

impl<T: Ord, N: usize> From for BTreeSet<T>

fn from(arr: [T; N]) -> Self

Converts a [T; N] into a BTreeSet<T>.

If the array contains any equal values, all but one will be dropped.

Examples

use std::collections::BTreeSet;

let set1 = BTreeSet::from([1, 2, 3, 4]);
let set2: BTreeSet<_> = [1, 2, 3, 4].into();
assert_eq!(set1, set2);

impl<T: PartialEq, A: Allocator + Clone> PartialEq for BTreeSet<T, A>

fn eq(self: &Self, other: &BTreeSet<T, A>) -> bool

impl<T: PartialOrd, A: Allocator + Clone> PartialOrd for BTreeSet<T, A>

fn partial_cmp(self: &Self, other: &BTreeSet<T, A>) -> Option<Ordering>