是否可以在Scala中“同步”两个优先级队列?

时间:2011-02-14 10:18:16

标签: scala scala-2.8 priority-queue deque

我有一组具有两种优先级的对象。 我可以创建两个按每个订购的PriorityQueue。 问题在于,当我从其中一个队列中取出元素时,它显然不会从另一个元素中消失。

是否可以“同步”创建2个队列,以便当从一个队列中删除元素时,它将从另一个队列中删除?

2 个答案:

答案 0 :(得分:3)

这保证了一种特殊的数据结构。标准库中可用的标准“引擎盖下的二进制堆”优先级队列无法解决问题,因为它不知道所需元素在其他二进制堆中的“where”。

当您尝试实现Dijkstra算法或A *时会发生类似的问题。在那里工作的技巧是使用2个有序树,就好像它们是队列一样 - 你可以弹出第一个元素,然后你可以在另一个树中搜索它。

答案 1 :(得分:0)

如果您不需要对数操作,只需使用double linked list作为队列。他们不保证FIFO,但提供您所需要的。

您可以轻松地将其中的两个包装在一个类中。