创建一个包含三元组的 PriorityQueue,并且 returns Scala 中的最小第三个元素?

Create a PriorityQueue that contains triples, and returns the minimum third element in Scala?

我在下面定义了 Scala 中的优先级队列。我的目标是,当我调用 dequeue 时,我得到在该三元组中具有最少第三个元素的三元组。我认为使用 Ordering 是可行的方法,但我似乎无法让它发挥作用。

import scala.collection.mutable.PriorityQueue

def orderByWeight(lst : (Int, Int, Int)) = lst._3

val pq = new PriorityQueue[(Int, Int, Int)]()(Ordering.by(orderByWeight))

var x = ListBuffer((0,1,2), (0,2,3), (0,3,4))

x.map(i => pq.enqueue(i))

我对我的 orderByWeight 函数应该是什么感到困惑。对于上面的代码,如果我调用 pq.dequeue,所需的输出应该是 (0, 1, 2)。注意 x 是随机排序的。有任何想法吗?

如果您希望所有 3 元组按照从小到大的第 3 个元素的顺序出列,我认为这就是您所需要的。

val pq = PriorityQueue[(Int, Int, Int)]()(Ordering.by(-_._3))

如果在第 3 个元素关系的情况下需要有序输出,您可以展开它。

var x = ListBuffer((0,1,2), (0,2,3), (0,3,4), (1,0,2))
val pq = PriorityQueue(x:_*)(Ordering[(Int, Int)].on(x => (-x._3, -x._2)))