为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2022-08-25 15:04:54
所以,我有一个类。我想要两个优先级队列的数据类型,以及一个类型对象的优先级队列。但是,我想在 上订购其中一个,并在 上订购另一个。现在,不支持关键功能,所以我采取了以下措施: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
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

也许你可以子类来为你做元组,像这样的东西(完全未经测试的代码):PriorityQueue


class MyPriorityQueue(PriorityQueue):

    def _put(self, item):

        super()._put((item.x, item))


    def _get(self):

        return super()._get()[1]


查看完整回答
反对 回复 2022-08-25
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号