有没有一种很好的方法可以在不破坏优先级队列的情况下从类queue.PriorityQueue()
中删除值?我想理论上我可以创建一个get
所有值的循环,直到我到达我需要的值,然后将所有其他值插回一个而不包括已删除的节点。这看起来有点矫枉过正。还有更好的方法吗?
编辑:我正在尝试建立节点的优先级队列,其中密钥是到达所述节点的成本。如果我找到更便宜的方式进入节点,我想以更便宜的成本将其替换为优先级队列。
答案 0 :(得分:2)
queue
模块及其类是主要用于同步(多线程/多处理)的工具,而不是纯数据结构。
也许您会找到符合您需求的this question的任何答案,或直接使用heapq
。
答案 1 :(得分:0)
不,没有一种好方法可以删除优先级队列中的任意值。您只能从优先级队列中提取top(min / max)元素。
设置数据结构(平衡二叉搜索树)会更好,因为你可以在O(log n)中找到并删除节点。