我已经定义了这样的优先级队列
import scala.collection.mutable.PriorityQueue
...
val queue = new PriorityQueue[(Int,Int)]()
我想使用这个顺序:
如果我们比较队列中的两个项目A和B,如果其(Int,Int)
元组的第一个元素大于,则A大于B。如果它们相同,那么如果其(Int,Int)
元组的第二个元素小于,则A大于B
如何定义这种排序?
答案 0 :(得分:1)
如果你的元素是Int
,那么定义这样一个Ordering
的最简单方法是对应该反向排序的元素进行否定。
您可以使用对象Ordering
提供的方法创建订购,并明确地将其传递给PriotityQueue
:
// I'm using the data format, you have provided originally, before the edit
val queue = PriorityQueue(
(1, (2,3), (4,5)),
(2, (3,4), (5,6)),
(2, (4,5), (6,7))
)(Ordering.by {
case (fst, (snd, _), (_, _)) => (fst, -snd)
})
或暗示:
implicit val MyOrdering: Ordering[(Int, (Int, Int), (Int, Int))] =
Ordering.by {
case (fst, (snd, _), (_, _)) => (fst, -snd)
}
val queue = PriorityQueue(
(1, (2,3), (4,5)),
(2, (3,4), (5,6)),
(2, (4,5), (6,7)))