有没有办法删除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 *算法保持较低的内存占用率。
答案 0 :(得分:1)
在PriorityQueue
中,为了插入而占优势,即在保证排序的位置插入新元素。在这种情况下,使用Int
上的默认排序(大于),
queue.takeWhile(_ > 6)
在谓词成立时迭代队列,而不是仔细检查每个项目的过滤器。