我有一组具有两种优先级的对象。 我可以创建两个按每个订购的PriorityQueue。 问题在于,当我从其中一个队列中取出元素时,它显然不会从另一个元素中消失。
是否可以“同步”创建2个队列,以便当从一个队列中删除元素时,它将从另一个队列中删除?
答案 0 :(得分:3)
这保证了一种特殊的数据结构。标准库中可用的标准“引擎盖下的二进制堆”优先级队列无法解决问题,因为它不知道所需元素在其他二进制堆中的“where”。
当您尝试实现Dijkstra算法或A *时会发生类似的问题。在那里工作的技巧是使用2个有序树,就好像它们是队列一样 - 你可以弹出第一个元素,然后你可以在另一个树中搜索它。
答案 1 :(得分:0)
如果您不需要对数操作,只需使用double linked list作为队列。他们不保证FIFO,但提供您所需要的。
您可以轻松地将其中的两个包装在一个类中。