Немного трудно ответить, что происходит, потому что вы не включили всю программу с входами и выходами. Я предполагаю, что это связано со старой реализацией PriorityQueue
в 2.8.1. Следующая программа использует пользовательский порядок и заполняет очередь приоритетов списком стеков:
import collection._
import collection.mutable.PriorityQueue
import collection.mutable.Stack
class Test[A](piles: Traversable[Stack[A]])(implicit ord: Ordering[A]) {
def PileOrdering = new Ordering[Stack[A]] {
def compare(a : Stack[A], b : Stack[A]) = ord.compare(a.head, b.head)
}
// Use a priority queue, ordering on stack heads (smallest stack elems)
val pq = new PriorityQueue[Stack[A]]()(PileOrdering)
// piles is a List[Stack[A]]
pq ++= piles
}
object Main {
def main(args: Array[String]) {
val t = new Test(Seq(Stack(1, 2, 3), Stack(15, 8), Stack(3, 4, 9, 0, -1), Stack(45, 1, 2, 3, 4)))
while (t.pq.nonEmpty) {
println(t.pq.dequeue)
}
}
}
Программа выводит:
Stack(45, 1, 2, 3, 4)
Stack(15, 8)
Stack(3, 4, 9, 0, -1)
Stack(1, 2, 3)
со стволом Scala, что представляется правильным. Следует отметить, что PriorityQueue
претерпел некоторые изменения, которые не были включены в 2.8.1 по причинам двоичной совместимости, но будут доступны в 2.9:
- Раньше это была последовательность, и она больше не является последовательностью -
apply
и update
не могут быть реализованы осмысленно
- вызов
toString
или итерации по элементам не приведут к порядку кучи - единственный способ получить его - использовать dequeue