1

我有一组具有两种优先级的对象。我可以创建两个按它们排序的 PriorityQueue。问题是,当我从其中一个元素中取出元素时,它显然不会从另一个元素中消失。

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

4

2 回答 2

3

这需要一种特殊的数据结构。标准库中可用的标准“底层二进制堆”优先级队列无法解决问题,因为它不知道所需元素在另一个二进制堆中的“位置”。

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

于 2011-02-14T11:58:59.207 回答
0

如果您不需要对数运算,只需使用双链表作为队列即可。他们不保证先进先出,但提供您需要的东西。

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

于 2011-02-15T12:51:27.410 回答