当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust BinaryHeap用法及代码示例


本文简要介绍rust语言中 Struct std::collections::BinaryHeap 的用法。

用法

pub struct BinaryHeap<T> { /* fields omitted */ }

使用二进制堆实现的优先级队列。

这将是一个max-heap。

以这样一种方式修改项目是一个逻辑错误,即项目相对于任何其他项目的排序(由 Ord 特征确定)在堆中时发生变化。这通常只能通过 Cell RefCell 、全局状态、I/O 或不安全代码实现。未指定由此类逻辑错误导致的行为(它可能包括Panics、不正确的结果、中止、内存泄漏或未终止),但不会是未定义的行为。

例子

use std::collections::BinaryHeap;

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

// We can use peek to look at the next item in the heap. In this case,
// there's no items in there yet so we get None.
assert_eq!(heap.peek(), None);

// Let's add some scores...
heap.push(1);
heap.push(5);
heap.push(2);

// Now peek shows the most important item in the heap.
assert_eq!(heap.peek(), Some(&5));

// We can check the length of a heap.
assert_eq!(heap.len(), 3);

// We can iterate over the items in the heap, although they are returned in
// a random order.
for x in &heap {
    println!("{}", x);
}

// If we instead pop these scores, they should come back in order.
assert_eq!(heap.pop(), Some(5));
assert_eq!(heap.pop(), Some(2));
assert_eq!(heap.pop(), Some(1));
assert_eq!(heap.pop(), None);

// We can clear the heap of any remaining items.
heap.clear();

// The heap should now be empty.
assert!(heap.is_empty())

可以从数组初始化具有已知项目列表的BinaryHeap

use std::collections::BinaryHeap;

let heap = BinaryHeap::from([1, 5, 2]);

Min-heap

core::cmp::Reverse 或自定义的 Ord 实现可用于使BinaryHeap 成为min-heap。这使得 heap.pop() 返回最小值而不是最大值。

use std::collections::BinaryHeap;
use std::cmp::Reverse;

let mut heap = BinaryHeap::new();

// Wrap values in `Reverse`
heap.push(Reverse(1));
heap.push(Reverse(5));
heap.push(Reverse(2));

// If we pop these scores now, they should come back in the reverse order.
assert_eq!(heap.pop(), Some(Reverse(1)));
assert_eq!(heap.pop(), Some(Reverse(2)));
assert_eq!(heap.pop(), Some(Reverse(5)));
assert_eq!(heap.pop(), None);

时间复杂度

push 的值是预期成本;方法文档给出了更详细的分析。

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::collections::BinaryHeap。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。