| Crates.io | dary_heap |
| lib.rs | dary_heap |
| version | 0.3.8 |
| created_at | 2020-09-26 14:31:08.19587+00 |
| updated_at | 2025-09-16 20:48:52.209038+00 |
| description | A d-ary heap |
| homepage | |
| repository | https://github.com/hanmertens/dary_heap |
| max_upload_size | |
| id | 293166 |
| size | 99,898 |
Rust implementation of a d-ary heap. The d = 2 version is present in
the standard library as BinaryHeap, but using a higher value
for d can bring performance improvements in many use cases. This is because a
higher arity d (maximum number of children each node can have) means the heap
contains less layers, making adding elements to the heap faster. However,
removing elements is slower, because then the amount of work per layer is higher
as there are more children. The latter effect is often diminished due to higher
cache locality. Therefore, overall performance is often increased if d > 2 but
not too high. Benchmarking is necessary to determine the best value of d for a
specific use case.
The API of this crate aims to be analogous to that of BinaryHeap in the
standard library. Feature-gated API in the standard library is
also feature-gated in dary_heap, see the section on features for
more information. In fact, the code in dary_heap is directly based on that of
the standard library. The BinaryHeap provided by this crate should therefore
provide similar performance as that of the standard library, and the other heap
types provided by this crate may provide performance improvements.
The version of the standard library this crate is based on is currently 1.89.0. The aim is to keep the crate in sync with the latest stable Rust release.
The minimum supported Rust version (MSRV) is currently 1.51.0. The MSRV can be
increased in a minor level release, but not in a patch level release. If a low
MSRV is not required, the extra feature can be enabled to add features and
performance enhancements which require a newer version of Rust (currently
1.61.0), which can change in a patch level release.
There are no stability guarantees for the unstable and unstable_nightly
features. Changes to the behavior of nullary heaps (that should not be used
anyway) are also not considered to be breaking and can happen in a patch level
release.
extra: add features that require a higher MSRV (currently 1.61.0).
shrink_to method to shrink heap capacity to a lower bound.try_reserve method to try to reserve additional capacity in the heap.try_reserve_exact method to try to reserve minimal additonal capacity.new method const.PeekMut::pop potentially faster.serde: add support for (de)serialization using Serde.unstable: enable support for experimental (unstable) features:
drain_sorted method which is like drain but yields elements in heap
order.into_iter_sorted method which is like into_iter but yields elements
in heap order.PeekMut::refresh method to obtain the current greatest element of the
heap after modification of the previously greatest element.unstable_nightly: enable support for experimental (unstable) features that
require a nightly Rust compiler:
exact_size_is_empty on
ExactSizeIterators in this crate.extend_one.SourceIter and InPlaceIterable for IntoIter.TrustedLen for iterators if possible (only when unstable is
also enabled).dary_heap is licensed under either of
at your option.