创建一个包含三元组的 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)))
我在下面定义了 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)))