倒序优先队列
Reverse order Priority Queue
有谁知道在 Rust 中是否可以颠倒优先级队列中的顺序?
当我查看队列时,我希望收到最低的 i32。但是,它似乎默认 returns 最高 i32.
编辑
这是我正在使用的包:docs.rs/priority-queue/1.2.0/priority_queue
根据 crate(包)的 documentation。
我认为您应该使用 DoublePriorityQueue
而不是 PriorityQueue
,因为它向队列中的 peek
提供最高值或最低值。分别使用 peek_max
或 peek_min
。
查看他们在 documentation 中提供的代码片段:
use priority_queue::DoublePriorityQueue;
let mut pq = DoublePriorityQueue::new();
assert!(pq.is_empty());
pq.push("Apples", 5);
pq.push("Bananas", 8);
pq.push("Strawberries", 23);
assert_eq!(pq.peek_max(), Some((&"Strawberries", &23)));
assert_eq!(pq.peek_min(), Some((&"Apples", &5)));
pq.change_priority("Bananas", 25);
assert_eq!(pq.peek_max(), Some((&"Bananas", &25)));
for (item, _) in pq.into_sorted_iter() {
println!("{}", item);
}
除非你需要从两端访问它,否则使用std::cmp::Reverse
应该是最有效的解决方案。 (例如 PriorityQueue<i32, Reverse<i32>>
、.push(x, Reverse(x))
)
有谁知道在 Rust 中是否可以颠倒优先级队列中的顺序? 当我查看队列时,我希望收到最低的 i32。但是,它似乎默认 returns 最高 i32.
编辑
这是我正在使用的包:docs.rs/priority-queue/1.2.0/priority_queue
根据 crate(包)的 documentation。
我认为您应该使用 DoublePriorityQueue
而不是 PriorityQueue
,因为它向队列中的 peek
提供最高值或最低值。分别使用 peek_max
或 peek_min
。
查看他们在 documentation 中提供的代码片段:
use priority_queue::DoublePriorityQueue;
let mut pq = DoublePriorityQueue::new();
assert!(pq.is_empty());
pq.push("Apples", 5);
pq.push("Bananas", 8);
pq.push("Strawberries", 23);
assert_eq!(pq.peek_max(), Some((&"Strawberries", &23)));
assert_eq!(pq.peek_min(), Some((&"Apples", &5)));
pq.change_priority("Bananas", 25);
assert_eq!(pq.peek_max(), Some((&"Bananas", &25)));
for (item, _) in pq.into_sorted_iter() {
println!("{}", item);
}
除非你需要从两端访问它,否则使用std::cmp::Reverse
应该是最有效的解决方案。 (例如 PriorityQueue<i32, Reverse<i32>>
、.push(x, Reverse(x))
)