问题
怎样实现一个按优先级排序的队列? 并且在这个队列上面每次pop操作总是返回优先级最
高的那个元素
"""
通过引入另外的 index 变量组成三元组 (priority, index, item) ,
就能很好的避免上面 的错误, 因为不可能有两个元素有相同的 index 值。
"""
import heapq
class PriorityQueue:
def __init__(self):
self._queque=[]
self._index=0
def push(self,item,priority):
heapq.heappush(self._queque,(-priority,self._index,item))
self._index+=1
def pop(self):
return heapq.heappop(self._queque)[-1]
class Item:
def __init__(self,name):
self.name=name
def __repr__(self):
return "Item({!r})".format(self.name)
q = PriorityQueue()
q.push(Item('foo'), 1)
q.push(Item('bar'), 5)
q.push(Item('spam'), 4)
q.push(Item('grok'), 1)
参考文档:《python cookbook(第3版)高清中文完整版(###).pdf》