#binary #heap #priority #queue

binary-heap-plus

Enhanced version of std::collections::BinaryHeap that supports max, min, and custom-order heaps

13 releases

0.5.0 Sep 30, 2022
0.4.1 Jan 6, 2021
0.4.0 Sep 29, 2020
0.3.1 Sep 24, 2020
0.1.4 May 18, 2018

#115 in Algorithms

Download history 18370/week @ 2023-11-03 19431/week @ 2023-11-10 20542/week @ 2023-11-17 21716/week @ 2023-11-24 19684/week @ 2023-12-01 20925/week @ 2023-12-08 15555/week @ 2023-12-15 9443/week @ 2023-12-22 9090/week @ 2023-12-29 17561/week @ 2024-01-05 22578/week @ 2024-01-12 32519/week @ 2024-01-19 32407/week @ 2024-01-26 26384/week @ 2024-02-02 23163/week @ 2024-02-09 27106/week @ 2024-02-16

114,375 downloads per month
Used in 21 crates (15 directly)

MIT license

80KB
890 lines

binary-heap-plus-rs

Rust

Enhancement over Rust's std::collections::BinaryHeap.

It supports the following heaps and still maintains backward compatibility.

  • Max heap
    • Use BinaryHeap::new() or ::with_capacity()
  • Min heap
    • Use BinaryHeap::new_min() or ::with_capacity_min()
  • Heap ordered by closure
    • Use BinaryHeap::new_by() or ::with_capacity_by()
  • Heap ordered by key generated by closure
    • Use BinaryHeap::new_by_key() or ::with_capacity_by_key()

Other notable added methods are:

  • BinaryHeap::from_vec_cmp() and BinaryHeap::from_vec() for more generic construction.
  • .into_iter_sorted() which is less-surprising version of .into_iter(). The implementation is backported from std.
  • .replace_cmp() which replace the comparator of the existing heap.

Compatibility and MSRV (Minimum Supported Rust Version)

This crate is based on the standard library's implementation of BinaryHeap from Rust 1.62.0.

The minimum supported Rust version is 1.56.0.

Changes

See CHANGELOG.md.

Thanks

  • I received many valuable feedback from Pre-RFC thread [1].
    • The current design is based on @ExpHP's suggestion that compiles on stable compiler.
    • DDOtten, steven099, CAD97, ExpHP, scottmcm, Nemo157 and gnzlbg, thanks for looking into the design!
  • @ulysseB sent me a first pull request!
  • @inesseq contributed feature serde1.
  • @davidli2010 contributed comparator update and unsafe perf optimization.

References

See the following discussions for the background of the crate:

Dependencies

~210KB