本文简要介绍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);
时间复杂度
std::collections::BinaryHeap.push | std::collections::BinaryHeap.pop | peek /peek_mut |
---|---|---|
O(1)~ | O(日志(n)) | O(1) |
push
的值是预期成本;方法文档给出了更详细的分析。
相关用法
- Rust BinaryHeap.capacity用法及代码示例
- Rust BinaryHeap.push用法及代码示例
- Rust BinaryHeap.clear用法及代码示例
- Rust BinaryHeap.new用法及代码示例
- Rust BinaryHeap.retain用法及代码示例
- Rust BinaryHeap.pop用法及代码示例
- Rust BinaryHeap.peek_mut用法及代码示例
- Rust BinaryHeap.reserve_exact用法及代码示例
- Rust BinaryHeap.as_slice用法及代码示例
- Rust BinaryHeap.peek用法及代码示例
- Rust BinaryHeap.drain用法及代码示例
- Rust BinaryHeap.reserve用法及代码示例
- Rust BinaryHeap.len用法及代码示例
- Rust BinaryHeap.append用法及代码示例
- Rust BinaryHeap.drain_sorted用法及代码示例
- Rust BinaryHeap.iter用法及代码示例
- Rust BinaryHeap.shrink_to_fit用法及代码示例
- Rust BinaryHeap.into_iter_sorted用法及代码示例
- Rust BinaryHeap.into_sorted_vec用法及代码示例
- Rust BinaryHeap.with_capacity用法及代码示例
- Rust BinaryHeap.into_vec用法及代码示例
- Rust BinaryHeap.shrink_to用法及代码示例
- Rust BinaryHeap.is_empty用法及代码示例
- Rust Binary用法及代码示例
- Rust BitXor用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::collections::BinaryHeap。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。