kotlin - 科特林 | 具有自定义比较器的最大堆类型的优先级队列
问题描述
我想为以下类的对象创建一个优先级队列(最大堆)
data class Tuple(val column: Column, var count: Int)
Column
在哪里
data class Column(val name: String, val dataType: String)
我编写了以下代码来实例化上述类对象的优先级队列,并使用自定义比较器,如下所示:
val compareByCount: Comparator<Tuple> = compareByDescending { it.count }
val pq = PriorityQueue<Tuple>(compareByCount)
当我填充PriorityQueue
并执行pq.peek()
它时,它会返回Tuple
计数最少的对象。为什么会这样?即使我提供了一个按降序检查的比较器。
解决方案
据我了解compareByDescending
,应该对堆中最大count
和开头的元素进行排序。
但由于这没有给你预期的结果,也许你可以试试这个:
val compareByCount = Comparator<Tuple> {t1, t2 -> t1.count - t2.count}
或者更简单,没有自定义比较器:
val pq = PriorityQueue {t1: Tuple, t2 : Tuple -> t1.count - t2.count}
这将以相反的顺序将元素添加到堆中compareByDescending
推荐阅读
- android - Nativescript-vue 将光标设置在 TextInput RTL 的末尾
- javascript - 如何选择数组中的唯一元素?
- c++ - 在 OpenGL 上单击鼠标时无法旋转和更改对象的颜色
- rest - 通过 REST/SOAP 更改 LDAP 密码
- python - 如何在需要命令行参数的脚本上使用 pdoc?
- sql - 从 time_delta 列 python 中获取总秒数
- laravel - 在 laravel 刀片视图中显示刀片代码片段
- python - 来自文档字符串的 Python 函数参数签名
- python - 如何使用 python (google colab) 将人员分配到房间?
- bash - Oozie Shell Action 无法运行 Docker 容器