在Scala中创建最小堆的最简单,最有效的方法是什么?

use*_*040 8 scala priority-queue min-heap data-structures

val maxHeap = scala.collection.mutable.PriorityQueue[Int] //Gives MaxHeap
Run Code Online (Sandbox Code Playgroud)

使用Ordering将PriorityQueue转换为minHeap最简洁有效的方法是什么?

Mar*_*rth 15

你必须定义自己的Ordering:

scala> object MinOrder extends Ordering[Int] {
         def compare(x:Int, y:Int) = y compare x
       }
defined object MinOrder
Run Code Online (Sandbox Code Playgroud)

然后在创建堆时使用它:

scala> val minHeap = scala.collection.mutable.PriorityQueue.empty(MinOrder)
minHeap: scala.collection.mutable.PriorityQueue[Int] = PriorityQueue()

scala> minHeap.ord
res1: Ordering[Int] = MinOrder$@158ac84e
Run Code Online (Sandbox Code Playgroud)

  • 我认为你甚至不需要创建自己的Ordering,你可以使用现有的方法.reverse:Ordering [Int] .reverse (8认同)
  • 完成val minHeap = scala.collection.mutable.PriorityQueue.empty(Ordering [Int] .reverse)https://codebunk.com/pb/788100787 (4认同)