使用相反顺序创建优先级队列

时间:2014-08-13 19:31:11

标签: python queue priority-queue

我创建了一个名为Element的新类对象,它具有很多价值' degree'

class Element(object):
 def __init__(self, name, i):
  self.name = name
  self.degree = i
  # some other values

 #some other functions

 def __cmp__(self, other):
  return cmp(self.degree, other.degree)

我想创建一个包含这些元素的优先级队列:

que = Queue.PriorityQueue()
que.put(Element('element1', 23))
que.put(Element('element2', 45))
que.put(Element('element3', 11))

while not que.empty():
 next_el = que.get()
 print next_el.name + " " + next_el.degree

程序将打印出来:

element3 11
element1 23
element2 45

但我希望:

element2 45
element1 23
element3 11

所以我想说,具有更大程度值的元素具有更高的优先级并且首先被采用。 第二个问题是:如果两个元素具有相同的度数值,它们将采用哪种顺序?

2 个答案:

答案 0 :(得分:1)

您可以使用此方法进行比较:

def __cmp__(self, other):
    return -cmp(self.degree, other.degree)

如果element1 < element2

,这将element1.degree > element2.degree

答案 1 :(得分:1)

您可以修改Element类的比较方法以反转顺序:

def __cmp__(self, other):
  return -cmp(self.degree, other.degree)

取消cmp的返回会使队列反转,因为__cmp__会返回正数,负数或零,具体取决于比较结果:

cmp(a, b) <  0: a <  b
cmp(a, b) >  0: a >  b
cmp(a, b) == 0: a == b