import heapq
class Element(object):
def __init__(self, name, val):
self.name = name
self.val = val
if __name__ == "__main__":
heap = []
e1 = Element('A', 1)
e2 = Element('B', 65)
e3 = Element('C', 53)
e4 = Element('D', 67)
...
heapq.heappush(heap, e1)
heapq.heappush(heap, e2)
heapq.heappush(heap, e3)
heapq.heappush(heap, e4)
...
#IF I want to take elements from the heap and print them I will call:
while heap:
new_e = heapq.heappop(heap)
print new_e.name + ' ' + str(new_e.val)
假设我有一个包含50个元素的堆。 我想将元素e3的值从val = 53更改为val = 0。 因此,这不是堆的顶部元素。 我也不想删除堆中的其他元素。 我该如何进行这样的更新操作?
heapq
实现带有更新的优先队列的可能解决方案在文档中已经给出。 - Dan GetzElement
不可比较,因此我不确定您如何使用它们与heapq
。您需要一个__lt__
方法(或者使用内置类型,例如已经可比较的tuple
)。 - Blckknght__cmp__
或某些丰富的比较方法,则具有任意顺序。不过问题仍然有点荒谬,因为Element
实例的val
属性根本不影响其在堆中的位置。 - Blckknght