如何将排序应用于 Scala 优先级队列?

How to apply ordering to a Scala Priority Queue?

我已经像这样定义了一个优先级队列

import scala.collection.mutable.PriorityQueue
...
val queue = new PriorityQueue[(Int,Int)]()

我想使用这个顺序:

如果我们比较队列中的两个项目 A 和 B,如果其 (Int,Int) 元组的第一个元素比 B 的,则 A 比 B 大。如果它们相同,则如果 A 的 (Int,Int) 元组的第二个元素比 B 的 ,则 A 比 B 大。

如何定义这种顺序?

如果您的元素是 Int,定义这样的 Ordering 的最简单方法是取负值,这些元素应该按相反的顺序排列。

您可以使用对象 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)))