创建一个逆序优先队列
我创建了一个新的类或对象,叫做 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
所以我想让 degree 值更大的元素优先被取出。还有第二个问题是:如果两个元素的 degree 值相同,它们会按照什么顺序被取出呢?
2 个回答
1
你可以用这个方法来进行比较:
def __cmp__(self, other):
return -cmp(self.degree, other.degree)
这样的话,如果 element1.degree > element2.degree
,那么 element1 < element2
就成立了。
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