删除PriorityQueue中的所有项目,其值小于x

时间:2016-06-09 22:02:32

标签: scala priority-queue a-star

有没有办法删除scala优先级队列中值小于指定值的所有项?

例如

val queue = scala.collection.mutable.PriorityQueue[Int]()
queue.enqueue(3)
queue.enqueue(5)
queue.enqueue(10)
queue.enqueue(8)
queue.removeAllLessThan(6)
println(queue) // PriorityQueue(10, 8)

我知道你可以使用过滤器来做到这一点,但似乎在堆上执行此操作会非常有效。

我想这样做的原因是为A *算法保持较低的内存占用率。

1 个答案:

答案 0 :(得分:1)

PriorityQueue中,为了插入而占优势,即在保证排序的位置插入新元素。在这种情况下,使用Int上的默认排序(大于),

queue.takeWhile(_ > 6)

在谓词成立时迭代队列,而不是仔细检查每个项目的过滤器。