Skip to content

Instantly share code, notes, and snippets.

@h2rd
Last active December 28, 2015 07:29
Show Gist options
  • Select an option

  • Save h2rd/7465001 to your computer and use it in GitHub Desktop.

Select an option

Save h2rd/7465001 to your computer and use it in GitHub Desktop.
import heapq
class PriorityQueue:
def __init__(self):
self._queue = []
self._index = 0
def push(self, item, priority):
heapq.heappush(self._queue, (-priority, self._index, item))
self._index += 1
def pop(self):
return heapq.heappop(self._queue)[-1]
class Item:
def __init__(self, name):
self._name = name
def __str__(self):
return "Item(%s)" % (self._name)
if __name__ == '__main__':
q = PriorityQueue()
q.push(Item('task1'), 1)
q.push(Item('task2'), 4)
q.push(Item('task3'), 2)
q.push(Item('task4'), 5)
q.push(Item('task5'), 6)
assert q.pop(), 'Item(task5)'
assert q.pop(), 'Item(task4)'
assert q.pop(), 'Item(task2)'
assert q.pop(), 'Item(task1)'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment