无插入块的优先队列

Priority Queue without insertion block

假设我有一个自定义 class,我希望为其设置一个优先级队列(具有固定大小,比如 100 个对象)。但是标准 queue.PriorityQueue 的问题是最大大小会在队列满后阻止插入。

我希望缓冲区仍然允许通过从队列中删除优先级最低的元素(由我的 __cmp__(self, other) 函数实现决定)来插入。是否存在相同的内置实现?

不,没有 built-in 功能。

更重要的是,priory 队列旨在识别最高优先级条目快速,而不是旨在快速识别哪个是优先级最低的项目。如果您要添加逻辑来查找它,它会降低队列的性能。

我建议实施 so-called min-max heap,它可以有效地识别最小和最大元素。

另一方面,如果您的目标是最多包含 100 个元素,您可能应该只使用列表并对其进行排序。对于这种足够快的小列表,当超过最大尺寸时很容易裁剪列表。