倒序优先队列[重复]
Posted
技术标签:
【中文标题】倒序优先队列[重复]【英文标题】:Reverse order Priority Queue [duplicate] 【发布时间】:2021-09-22 11:27:11 【问题描述】:有谁知道是否可以在 Rust 中颠倒优先级队列中的顺序? 当我查看队列时,我希望接收到最低的 i32。但是,它似乎默认返回最高的 i32。
编辑
这是我正在使用的包:docs.rs/priority-queue/1.2.0/priority_queue
【问题讨论】:
嗨@MaxTorreSchau,你应该知道你正在使用哪个包。因为我不相信这是生锈的原生类型?是这个:docs.rs/priority-queue/1.2.0/priority_queue? 是的,没错! 那么不妨看看双优先队列:docs.rs/priority-queue/1.2.0/priority_queue/… 看来peek_min
将非常适合您的需求
如果您不需要即时更改顺序,另一种选择是在推送队列中的项目时反转优先级。 IE。 push (item, -prio)
而不是 push (item, prio)
。
这能回答你的问题吗? How do I create a BinaryHeap that pops the smallest value, not the largest? 适用于 BinaryHeap
,但该方法适用于任何依赖于 PartialEq
的数据结构。
【参考方案1】:
除非您需要从两端访问它,否则使用std::cmp::Reverse
应该是最有效的解决方案。 (例如PriorityQueue<i32, Reverse<i32>>
、.push(x, Reverse(x))
)
【讨论】:
如何将它与 PriorityQueue 一起使用? @Jean 我的编辑回答你的问题了吗? 非常好,谢谢! 实际上,如何访问 Reversereverse_variable.0
给出了值。根据箱子(包)的documentation。
我相信您应该使用DoublePriorityQueue
而不是PriorityQueue
,因为它为队列中的peek
提供了最高值或最低值。分别使用peek_max
或peek_min
。
查看他们在documentation中提供的代码的sn-p:
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);
【讨论】:
以上是关于倒序优先队列[重复]的主要内容,如果未能解决你的问题,请参考以下文章