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

Posted

技术标签:

【中文标题】创建一个包含三元组的 PriorityQueue,并返回 Scala 中的最小第三个元素?【英文标题】:Create a PriorityQueue that contains triples, and returns the minimum third element in Scala? 【发布时间】:2016-11-20 02:39:38 【问题描述】:

我在下面定义的 Scala 中有一个优先级队列。我的目标是,当我调用 dequeue 时,我会得到该三元组中第三个元素最少的三元组。我认为使用订购是要走的路,但我似乎无法让它发挥作用。

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 是随机订购的。有任何想法吗?

【问题讨论】:

【参考方案1】:

如果您希望所有 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)))

【讨论】:

以上是关于创建一个包含三元组的 PriorityQueue,并返回 Scala 中的最小第三个元素?的主要内容,如果未能解决你的问题,请参考以下文章

Python PriorityQueue 仅获取元组的一部分

PriorityQueue原理分析——基于源码

元组中的 OCaml 意外类型不匹配

使用 Gensim 获取三元组的问题

算法leetcode|6136. 算术三元组的数目(rust和go全部双百)

算法leetcode|6136. 算术三元组的数目(rust和go全部双百)