猿问

维护两个相同类型对象的优先级队列,每个队列具有不同的排序属性

所以,我有一个类。我想要两个优先级队列的数据类型,以及一个类型对象的优先级队列。但是,我想在 上订购其中一个,并在 上订购另一个。现在,不支持关键功能,所以我采取了以下措施:PPPP.xP.yqueue.PriorityQueue.put()


class P:

    ...

    def __lt__(self, other):

        return self.y < other.y

    ...

但是,这不允许基于进行排序,同时,我想偷看其中一个队列而不是另一个队列,并且没有函数。因此,我用排序列表替换了其中一个优先级队列。我无法使用该库,因为这是用于家庭作业的,我不能保证评分服务器已安装它,因此我转向使用.P.xqueue.PriorityQueuepeekSortedContainersbisect.insort


然而,唯一的问题是它也不支持关键功能。因此,我必须编写自己的函数来完成此任务,然后用 .这感觉就像一个黑客,因为我正在编写自己的二进制插入函数,而二进制插入是一个核心的计算机科学概念,这之前一定已经出现过。bisect.insortbinary_insert(lst, item, key)binary_insert(lst, item, key = lambda i: i.x)


一种方法是使用形式的列表存储元组,并具有表单的优先级队列存储元组。但是,有没有其他方法可以将这些属性内化到自身中?否则,每次弹出项目时,我都必须解压缩元组,这可能会导致我的程序充斥着未使用的变量。(x, p)(y, p)P


森林海
浏览 107回答 1
1回答

慕的地8271018

也许你可以子类来为你做元组,像这样的东西(完全未经测试的代码):PriorityQueueclass MyPriorityQueue(PriorityQueue):&nbsp; &nbsp; def _put(self, item):&nbsp; &nbsp; &nbsp; &nbsp; super()._put((item.x, item))&nbsp; &nbsp; def _get(self):&nbsp; &nbsp; &nbsp; &nbsp; return super()._get()[1]
随时随地看视频慕课网APP

相关分类

Python
我要回答