我正在使用heapq使用堆来生成优先级队列。
我使用
heapq.heappush(h, (cost, node))
其中,h是堆对象,cost是排序堆的项,node是自定义类的对象。
当我运行代码时,当我在h中插入两个具有相同cost的不同项时,会出现以下错误
类型错误:无序类型:searchnode()其中SearchNode()node的类
这个错误表明python正在比较第二个项。
堆元素有比较顺序吗如果是,我如何解决算法中的关系,使其不开始比较第二项我想到的一个可能的解决方案是重载SearchNode()类的比较运算符。
我对python很陌生,所以如果我遗漏了一些非常明显的东西,请随时指出。

最佳答案

如果你能明智地决定一种比较节点的方法,你可以用它来打破联系例如,可以为每个节点分配一个“标签”,您可以保证它是唯一的。你可以通过比较词典上的标签来打破关系。

class SearchNode:
    def __init__(self, label):
        self.label = label
        #etc

    def __lt__(self, other):
        return self.label < other.label

这将确保(cost, node)的比较是确定的。

关于python - python中堆元素的比较顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39423979/

10-16 08:50