目前,我正在尝试使用Python内置的heapq库编写优先队列。然而,我在尝试理解Python如何处理平局时遇到了困难。我希望有一种特定的条件,可以决定平局时应该发生什么,而不是像heapq库那样几乎随机地从队列中选择一个元素。是否有人知道重新编写平局条件的方法,或者从头开始构建优先队列会更容易?
目前,我正在尝试使用Python内置的heapq库编写优先队列。然而,我在尝试理解Python如何处理平局时遇到了困难。我希望有一种特定的条件,可以决定平局时应该发生什么,而不是像heapq库那样几乎随机地从队列中选择一个元素。是否有人知道重新编写平局条件的方法,或者从头开始构建优先队列会更容易?
heapq
使用队列项上的内在比较(__le__
等函数)。解决这个限制的常用方法是称为“装饰/去饰”——在引入key=
参数之前,我们在排序中就是用这种方法。
简单来说,你不仅可以将自己关心的项("有效载荷")入队和出队,而且可以将这些项"装饰"成元组,以便以后能够被heapq
考虑到。例如,如果您想通过按插入时间破解绑定到x
属性的优先级,那么向队列中加入类似于(foo.x, time.time(), foo)
的元组是很正常的做法。当然,在出队时,您需要"去饰",即获取通过出队获得的元组的最后一项[-1]
。
因此,只需将您需要用于"破开平局"的"次要键"放入您所"装饰"的元组中,并将其放在您希望以这种方式进行"平局破解"的键之后。