Struct IntervalHeap

Source
pub struct IntervalHeap<T, C: Compare<T> = Natural<T>> { /* private fields */ }
Expand description

A double-ended priority queue implemented with an interval heap.

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 heap’s comparator, changes while it is in the heap. This is normally only possible through Cell, RefCell, global state, I/O, or unsafe code.

Implementations§

Source§

impl<T: Ord> IntervalHeap<T>

Source

pub fn new() -> IntervalHeap<T>

Returns an empty heap ordered according to the natural order of its items.

§Examples
use interval_heap::IntervalHeap;

let heap = IntervalHeap::<u32>::new();
assert!(heap.is_empty());
Source

pub fn with_capacity(capacity: usize) -> IntervalHeap<T>

Returns an empty heap with the given capacity and ordered according to the natural order of its items.

The heap will be able to hold exactly capacity items without reallocating.

§Examples
use interval_heap::IntervalHeap;

let heap = IntervalHeap::<u32>::with_capacity(5);
assert!(heap.is_empty());
assert!(heap.capacity() >= 5);
Source§

impl<T, C: Compare<T>> IntervalHeap<T, C>

Source

pub fn with_comparator(cmp: C) -> IntervalHeap<T, C>

Returns an empty heap ordered according to the given comparator.

Source

pub fn with_capacity_and_comparator( capacity: usize, cmp: C, ) -> IntervalHeap<T, C>

Returns an empty heap with the given capacity and ordered according to the given comparator.

Source

pub fn from_vec_and_comparator(vec: Vec<T>, cmp: C) -> IntervalHeap<T, C>

Returns a heap containing all the items of the given vector and ordered according to the given comparator.

Source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator visiting all items in the heap in arbitrary order.

Source

pub fn min(&self) -> Option<&T>

Returns a reference to the smallest item in the heap.

Returns None if the heap is empty.

Source

pub fn max(&self) -> Option<&T>

Returns a reference to the greatest item in the heap.

Returns None if the heap is empty.

Source

pub fn min_max(&self) -> Option<(&T, &T)>

Returns references to the smallest and greatest items in the heap.

Returns None if the heap is empty.

Source

pub fn capacity(&self) -> usize

Returns the number of items the heap can hold without reallocation.

Source

pub fn reserve_exact(&mut self, additional: usize)

Reserves the minimum capacity for exactly additional more items to be inserted into the heap.

Does nothing if the capacity is already sufficient.

Note that the allocator may give the heap more space than it requests. Therefore capacity can not be relied upon to be precisely minimal. Prefer reserve if future insertions are expected.

Source

pub fn reserve(&mut self, additional: usize)

Reserves capacity for at least additional more items to be inserted into the heap.

The heap may reserve more space to avoid frequent reallocations.

Source

pub fn shrink_to_fit(&mut self)

Discards as much additional capacity from the heap as possible.

Source

pub fn pop_min(&mut self) -> Option<T>

Removes the smallest item from the heap and returns it.

Returns None if the heap was empty.

Source

pub fn pop_max(&mut self) -> Option<T>

Removes the greatest item from the heap and returns it.

Returns None if the heap was empty.

Source

pub fn push(&mut self, item: T)

Pushes an item onto the heap.

Source

pub fn into_vec(self) -> Vec<T>

Consumes the heap and returns its items as a vector in arbitrary order.

Source

pub fn into_sorted_vec(self) -> Vec<T>

Consumes the heap and returns its items as a vector in sorted (ascending) order.

Source

pub fn len(&self) -> usize

Returns the number of items in the heap.

Source

pub fn is_empty(&self) -> bool

Returns true if the heap contains no items.

Source

pub fn clear(&mut self)

Removes all items from the heap.

Trait Implementations§

Source§

impl<T: Clone, C: Clone + Compare<T>> Clone for IntervalHeap<T, C>

Source§

fn clone(&self) -> IntervalHeap<T, C>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug, C: Compare<T>> Debug for IntervalHeap<T, C>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<T, C: Compare<T> + Default> Default for IntervalHeap<T, C>

Source§

fn default() -> IntervalHeap<T, C>

Returns the “default value” for a type. Read more
Source§

impl<'a, T: 'a + Copy, C: Compare<T>> Extend<&'a T> for IntervalHeap<T, C>

Source§

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

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T, C: Compare<T>> Extend<T> for IntervalHeap<T, C>

Source§

fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T: Ord> From<Vec<T>> for IntervalHeap<T>

Source§

fn from(vec: Vec<T>) -> IntervalHeap<T>

Returns a heap containing all the items of the given vector and ordered according to the natural order of its items.

§Examples
use interval_heap::IntervalHeap;

let heap = IntervalHeap::from(vec![5, 1, 6, 4]);
assert_eq!(heap.len(), 4);
assert_eq!(heap.min_max(), Some((&1, &6)));
Source§

impl<T, C: Compare<T> + Default> FromIterator<T> for IntervalHeap<T, C>

Source§

fn from_iter<I: IntoIterator<Item = T>>(iter: I) -> IntervalHeap<T, C>

Creates a value from an iterator. Read more
Source§

impl<'a, T, C: Compare<T>> IntoIterator for &'a IntervalHeap<T, C>

Source§

type Item = &'a T

The type of the elements being iterated over.
Source§

type IntoIter = Iter<'a, T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Iter<'a, T>

Creates an iterator from a value. Read more
Source§

impl<T, C: Compare<T>> IntoIterator for IntervalHeap<T, C>

Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> IntoIter<T>

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<T, C> Freeze for IntervalHeap<T, C>
where C: Freeze,

§

impl<T, C> RefUnwindSafe for IntervalHeap<T, C>

§

impl<T, C> Send for IntervalHeap<T, C>
where C: Send, T: Send,

§

impl<T, C> Sync for IntervalHeap<T, C>
where C: Sync, T: Sync,

§

impl<T, C> Unpin for IntervalHeap<T, C>
where C: Unpin, T: Unpin,

§

impl<T, C> UnwindSafe for IntervalHeap<T, C>
where C: UnwindSafe, T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.