heapq documentation에 따르면 힙 순서를 사용자 정의하는 방법은 힙의 각 요소를 튜플로 만드는 것이고 첫 번째 튜플 요소는 일반적인 파이썬 비교를 허용하는 것입니다.
heapq 모듈의 함수는 (객체 지향적이 아니기 때문에) 조금 번거롭고 항상 힙 객체 (heapified list)가 첫 번째 매개 변수로 명시 적으로 전달되어야합니다. 우리는 key
함수를 지정하고 힙을 객체로 제시 할 수있는 매우 간단한 래퍼 클래스를 작성하여 한 돌로 두 마리를 죽일 수 있습니다.
클래스 이하 각 요소 힙 인스턴스에 전달 key
파라미터를 이용하여 소자의 삽입시에 산출 된 키이며, 제 1 부재하는 튜플이다 내부에서, 유지 :
# -*- coding: utf-8 -*-
import heapq
class MyHeap(object):
def __init__(self, initial=None, key=lambda x:x):
self.key = key
if initial:
self._data = [(key(item), item) for item in initial]
heapq.heapify(self._data)
else:
self._data = []
def push(self, item):
heapq.heappush(self._data, (self.key(item), item))
def pop(self):
return heapq.heappop(self._data)[1]
가능한 중복 http://stackoverflow.com/questions/679731/min-heap-in-python –
가능한 중복 [heapq을 특정 속성에서 힙을 평가하는 방법?] (http : // stackoverflow .com/questions/3954530/how-to-make-heapq-evaluation-the-heap-of-a-specific-attribute) –