2013-02-27 23 views
9

Potrzebuję kolejki priorytetowej, która najpierw pobiera element o najwyższej wartości priorytetu. Obecnie używam klasy PriorityQueue z biblioteki Queue. Jednak ta funkcja zwraca najpierw tylko elementy o najniższej wartości. Wypróbowałem kilka brzydkich rozwiązań, takich jak (sys.maxint - priority), ale zastanawiałem się, czy istnieje bardziej eleganckie rozwiązanie.Kolejka priorytetowa o wyższym priorytecie jako pierwsza w języku Python

Odpowiedz

15

Zamiast tego użyj ujemnego priorytetu, nie trzeba odejmować od sys.maxint.

queue.put((-priority, item)) 

Element o priorytecie -10 zostanie zwrócony przed pozycjami o priorytecie -5, na przykład.

+0

Podczas gdy to działa, szczerze mnie to niepokoi, ponieważ to oznacza, że ​​wszystkie inne powiązane logiki zostały odwrócone w twojej głowie. – blueman

+1

@blueman: następnie podklasuj klasę kolejki i nadpisaj metody, aby odwrócić priorytet dla ciebie. –

Powiązane problemy