我有一组具有两种优先级的对象。我可以创建两个按它们排序的 PriorityQueue。问题是,当我从其中一个元素中取出元素时,它显然不会从另一个元素中消失。
是否可以“同步”创建 2 个队列,以便当元素从一个队列中删除时,它将从另一个队列中删除?
我有一组具有两种优先级的对象。我可以创建两个按它们排序的 PriorityQueue。问题是,当我从其中一个元素中取出元素时,它显然不会从另一个元素中消失。
是否可以“同步”创建 2 个队列,以便当元素从一个队列中删除时,它将从另一个队列中删除?
这需要一种特殊的数据结构。标准库中可用的标准“底层二进制堆”优先级队列无法解决问题,因为它不知道所需元素在另一个二进制堆中的“位置”。
当您尝试实现 Dijkstra 算法或 A* 时,也会发生类似的问题。在那里工作的技巧是使用 2 棵有序树,就好像它们是队列一样 - 你可以弹出第一个元素,然后你可以在另一棵树中搜索它。
如果您不需要对数运算,只需使用双链表作为队列即可。他们不保证先进先出,但提供您需要的东西。
您可以轻松地将其中两个包装在一个类中。