pub struct BoundedBTreeSet<T, S>(/* private fields */);
Expand description
A bounded set based on a B-Tree.
B-Trees represent a fundamental compromise between cache-efficiency and actually minimizing
the amount of work performed in a search. See BTreeSet
for more details.
Unlike a standard BTreeSet
, there is an enforced upper limit to the number of items in the
set. All internal operations ensure this bound is respected.
Implementations§
Source§impl<T, S> BoundedBTreeSet<T, S>
impl<T, S> BoundedBTreeSet<T, S>
Source§impl<T, S> BoundedBTreeSet<T, S>
impl<T, S> BoundedBTreeSet<T, S>
Sourcepub fn into_inner(self) -> BTreeSet<T>
pub fn into_inner(self) -> BTreeSet<T>
Consume self, and return the inner BTreeSet
.
This is useful when a mutating API of the inner type is desired, and closure-based mutation
such as provided by try_mutate
is inconvenient.
Sourcepub fn try_mutate(self, mutate: impl FnMut(&mut BTreeSet<T>)) -> Option<Self>
pub fn try_mutate(self, mutate: impl FnMut(&mut BTreeSet<T>)) -> Option<Self>
Consumes self and mutates self via the given mutate
function.
If the outcome of mutation is within bounds, Some(Self)
is returned. Else, None
is
returned.
This is essentially a consuming shorthand Self::into_inner
-> ...
->
Self::try_from
.
Sourcepub fn try_insert(&mut self, item: T) -> Result<bool, T>
pub fn try_insert(&mut self, item: T) -> Result<bool, T>
Exactly the same semantics as BTreeSet::insert
, but returns an Err
(and is a noop) if
the new length of the set exceeds S
.
In the Err
case, returns the inserted item so it can be further used without cloning.
Sourcepub fn remove<Q>(&mut self, item: &Q) -> bool
pub fn remove<Q>(&mut self, item: &Q) -> bool
Remove an item from the set, returning whether it was previously in the set.
The item may be any borrowed form of the set’s item type, but the ordering on the borrowed form must match the ordering on the item type.
Methods from Deref<Target = BTreeSet<T>>§
1.17.0 · Sourcepub fn range<K, R>(&self, range: R) -> Range<'_, T>
pub fn range<K, R>(&self, range: R) -> Range<'_, T>
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());
1.0.0 · Sourcepub fn difference<'a>(
&'a self,
other: &'a BTreeSet<T, A>,
) -> Difference<'a, T, A>where
T: Ord,
pub fn difference<'a>(
&'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]);
1.0.0 · Sourcepub fn symmetric_difference<'a>(
&'a self,
other: &'a BTreeSet<T, A>,
) -> SymmetricDifference<'a, T>where
T: Ord,
pub fn symmetric_difference<'a>(
&'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]);
1.0.0 · Sourcepub fn intersection<'a>(
&'a self,
other: &'a BTreeSet<T, A>,
) -> Intersection<'a, T, A>where
T: Ord,
pub fn intersection<'a>(
&'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]);
1.0.0 · Sourcepub fn union<'a>(&'a self, other: &'a BTreeSet<T, A>) -> Union<'a, T>where
T: Ord,
pub fn union<'a>(&'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]);
1.0.0 · Sourcepub fn contains<Q>(&self, value: &Q) -> bool
pub fn contains<Q>(&self, value: &Q) -> bool
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);
1.9.0 · Sourcepub fn get<Q>(&self, value: &Q) -> Option<&T>
pub fn get<Q>(&self, value: &Q) -> Option<&T>
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);
1.0.0 · Sourcepub fn is_disjoint(&self, other: &BTreeSet<T, A>) -> boolwhere
T: Ord,
pub fn is_disjoint(&self, other: &BTreeSet<T, A>) -> boolwhere
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);
1.0.0 · Sourcepub fn is_subset(&self, other: &BTreeSet<T, A>) -> boolwhere
T: Ord,
pub fn is_subset(&self, other: &BTreeSet<T, A>) -> boolwhere
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);
1.0.0 · Sourcepub fn is_superset(&self, other: &BTreeSet<T, A>) -> boolwhere
T: Ord,
pub fn is_superset(&self, other: &BTreeSet<T, A>) -> boolwhere
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);
1.66.0 · Sourcepub fn first(&self) -> Option<&T>where
T: Ord,
pub fn first(&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));
1.66.0 · Sourcepub fn last(&self) -> Option<&T>where
T: Ord,
pub fn last(&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));
1.0.0 · Sourcepub fn iter(&self) -> Iter<'_, T>
pub fn iter(&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);
1.0.0 · Sourcepub fn len(&self) -> usize
pub fn len(&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);
1.0.0 · Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&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());
Sourcepub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, T>
🔬This is a nightly-only experimental API. (btree_cursors
)
pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, T>
btree_cursors
)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));
Sourcepub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, T>
🔬This is a nightly-only experimental API. (btree_cursors
)
pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, T>
btree_cursors
)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);
Trait Implementations§
Source§impl<T, S> Clone for BoundedBTreeSet<T, S>
impl<T, S> Clone for BoundedBTreeSet<T, S>
Source§impl<T, S> Debug for BoundedBTreeSet<T, S>
impl<T, S> Debug for BoundedBTreeSet<T, S>
Source§impl<T, S> Decode for BoundedBTreeSet<T, S>
impl<T, S> Decode for BoundedBTreeSet<T, S>
Source§fn decode<I: Input>(input: &mut I) -> Result<Self, Error>
fn decode<I: Input>(input: &mut I) -> Result<Self, Error>
Source§fn skip<I: Input>(input: &mut I) -> Result<(), Error>
fn skip<I: Input>(input: &mut I) -> Result<(), Error>
Source§fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
fn decode_into<I>(
input: &mut I,
dst: &mut MaybeUninit<Self>,
) -> Result<DecodeFinished, Error>where
I: Input,
Source§impl<T, S> DecodeLength for BoundedBTreeSet<T, S>
impl<T, S> DecodeLength for BoundedBTreeSet<T, S>
Source§impl<T, S> Default for BoundedBTreeSet<T, S>
impl<T, S> Default for BoundedBTreeSet<T, S>
Source§impl<T, S> Deref for BoundedBTreeSet<T, S>where
T: Ord,
impl<T, S> Deref for BoundedBTreeSet<T, S>where
T: Ord,
Source§impl<'de, T, S> Deserialize<'de> for BoundedBTreeSet<T, S>
impl<'de, T, S> Deserialize<'de> for BoundedBTreeSet<T, S>
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl<T, S> Encode for BoundedBTreeSet<T, S>
impl<T, S> Encode for BoundedBTreeSet<T, S>
Source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
Source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy,
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>( &self, __codec_dest_edqy: &mut __CodecOutputEdqy, )
Source§fn using_encoded<R, F>(&self, f: F) -> R
fn using_encoded<R, F>(&self, f: F) -> R
Source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
Source§impl<T, S> From<BoundedBTreeSet<T, S>> for BTreeSet<T>where
T: Ord,
impl<T, S> From<BoundedBTreeSet<T, S>> for BTreeSet<T>where
T: Ord,
Source§fn from(set: BoundedBTreeSet<T, S>) -> Self
fn from(set: BoundedBTreeSet<T, S>) -> Self
Source§impl<T: Hash, S> Hash for BoundedBTreeSet<T, S>
impl<T: Hash, S> Hash for BoundedBTreeSet<T, S>
Source§impl<'a, T, S> IntoIterator for &'a BoundedBTreeSet<T, S>
impl<'a, T, S> IntoIterator for &'a BoundedBTreeSet<T, S>
Source§impl<T, S> IntoIterator for BoundedBTreeSet<T, S>
impl<T, S> IntoIterator for BoundedBTreeSet<T, S>
Source§impl<T, S> MaxEncodedLen for BoundedBTreeSet<T, S>
impl<T, S> MaxEncodedLen for BoundedBTreeSet<T, S>
Source§fn max_encoded_len() -> usize
fn max_encoded_len() -> usize
Source§impl<T, S> Ord for BoundedBTreeSet<T, S>
impl<T, S> Ord for BoundedBTreeSet<T, S>
Source§impl<T, S> PartialEq<BTreeSet<T>> for BoundedBTreeSet<T, S>
impl<T, S> PartialEq<BTreeSet<T>> for BoundedBTreeSet<T, S>
Source§impl<T, S1, S2> PartialEq<BoundedBTreeSet<T, S1>> for BoundedBTreeSet<T, S2>
impl<T, S1, S2> PartialEq<BoundedBTreeSet<T, S1>> for BoundedBTreeSet<T, S2>
Source§impl<T, S> PartialOrd for BoundedBTreeSet<T, S>
impl<T, S> PartialOrd for BoundedBTreeSet<T, S>
Source§impl<T, S> Serialize for BoundedBTreeSet<T, S>where
T: Serialize,
impl<T, S> Serialize for BoundedBTreeSet<T, S>where
T: Serialize,
Source§impl<I, T, Bound> TryCollect<BoundedBTreeSet<T, Bound>> for I
impl<I, T, Bound> TryCollect<BoundedBTreeSet<T, Bound>> for I
Source§impl<T, S> TryFrom<BTreeSet<T>> for BoundedBTreeSet<T, S>
impl<T, S> TryFrom<BTreeSet<T>> for BoundedBTreeSet<T, S>
Source§impl<T, S> TypeInfo for BoundedBTreeSet<T, S>where
BTreeSet<T>: TypeInfo + 'static,
PhantomData<S>: TypeInfo + 'static,
T: TypeInfo + 'static,
S: 'static,
impl<T, S> TypeInfo for BoundedBTreeSet<T, S>where
BTreeSet<T>: TypeInfo + 'static,
PhantomData<S>: TypeInfo + 'static,
T: TypeInfo + 'static,
S: 'static,
impl<T, S> EncodeLike<BTreeSet<T>> for BoundedBTreeSet<T, S>
impl<T, S> EncodeLike for BoundedBTreeSet<T, S>
impl<T, S> Eq for BoundedBTreeSet<T, S>
Auto Trait Implementations§
impl<T, S> Freeze for BoundedBTreeSet<T, S>
impl<T, S> RefUnwindSafe for BoundedBTreeSet<T, S>where
S: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, S> Send for BoundedBTreeSet<T, S>
impl<T, S> Sync for BoundedBTreeSet<T, S>
impl<T, S> Unpin for BoundedBTreeSet<T, S>where
S: Unpin,
impl<T, S> UnwindSafe for BoundedBTreeSet<T, S>where
S: UnwindSafe,
T: 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)