具有自定义顺序的优先级队列

屋大维

我有这个案例课:

case class Offer(id: Int, amount: Int, interestRate: Double) extends Ordered[Offer] {

  def compare(that: Offer) = interestRate.compareTo(that.interestRate)
}

如您所见,我基于定义了排序Offer.interestRate我希望订购量增加。

我创建了这些优惠:

Offer(1, 5, 4.0)
Offer(2, 5, 0.5)
Offer(3, 5, 1.5)

并将它们添加到优先级队列中:

val currentOffers: mutable.PriorityQueue[Offer] = mutable.PriorityQueue.empty[Offer]

问题是,当currentOffers.dequeue()我得到的时候Offer(1, 5, 4.0)

相反,我想得到:

Offer(2, 5, 0.5)

我需要更改什么?

丹尼斯·罗斯卡(Denis Rosca)

正如其他人暗示的那样,没有太多解释,问题出在您的比较功能上:

def compare(that: Offer) = this.interestRate.compareTo(that.interestRate)

这与-1 <0 <1的数字的自然顺序匹配。

在Scala中创建优先级队列时,它将使用OrderingOrder您定义的隐式派生的您所缺少的是,优先级队列会将“较高”的值视为具有最高优先级(基本上按降序排列)。

最简单的解决方法是将compare函数更改为其反函数:

def compare(that: Offer) = that.interestRate.compareTo(this.interestRate)

需要注意的反转thatthis

另一种选择是Ordering在构建队列时提供

val q = mutable.PriorityQueue(
  Offer(1, 5, 4.0),
  Offer(2, 5, 0.5),
  Offer(3, 5, 1.5)
)(Ordering.by[Offer, Double](_.interestRate).reverse)

它的作用是:“通过对利率进行反向排序来创建要约的订单”。

我更喜欢第二个选项,因为它提供了更好的粒度,并允许在必要时使用多个排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有类中的自定义比较功能的C ++优先级队列

来自分类Dev

Cython中具有自定义比较器的优先级队列

来自分类Dev

具有自定义类型和比较器的C ++优先级队列不起作用

来自分类Dev

第二次推送时具有自定义比较器分段错误的优先级队列

来自分类Dev

优先级队列的自定义比较功能

来自分类Dev

创建具有相反顺序的优先级队列

来自分类Dev

自定义优先级队列比较器,用于访问类的私有成员

来自分类Dev

自定义优先级队列比较器,用于访问类的私有成员

来自分类Dev

具有自定义测试用例优先级的测试结果图表

来自分类Dev

带有自定义比较函数的 C++ 优先级队列在 Push() 时行为不正确

来自分类Dev

为自定义创建的串行异步队列设置优先级

来自分类Dev

如何在优先级队列中将functor用作自定义比较器

来自分类Dev

内容具有优先级的内容不适用于UIStackView中的自定义视图和标签

来自分类Dev

如何在C ++中定义具有四个值的优先级队列?

来自分类Dev

具有两个优先级Python的优先级队列

来自分类Dev

具有两个优先级值的优先级队列

来自分类Dev

具有两个优先级Python的优先级队列

来自分类Dev

具有减少键操作的Javascript优先级队列

来自分类Dev

自定义和内置Directve之间的优先级

来自分类Dev

需要想法使用优先级队列在数据结构中自定义算法

来自分类Dev

定义自定义转换器时,哪一个在FacesConverter批注中的value和forClass之间具有更高的优先级?

来自分类Dev

定义自定义转换器时,哪一个在FacesConverter批注中的value和forClass之间具有更高的优先级?

来自分类Dev

对具有较高优先级的一系列元素和具有较低优先级的其他元素的优先级队列进行排序

来自分类Dev

如果多个元素具有相同的优先级,Python中是否有“ Lifo”类型的优先级队列?

来自分类Dev

C ++实现具有不同优先级功能的优先级队列的最佳方法是什么?

来自分类Dev

如何优先于默认Angular-material CSS的自定义CSS优先级

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

如何用O(logN)排序具有n个元素的优先级队列?

Related 相关文章

  1. 1

    具有类中的自定义比较功能的C ++优先级队列

  2. 2

    Cython中具有自定义比较器的优先级队列

  3. 3

    具有自定义类型和比较器的C ++优先级队列不起作用

  4. 4

    第二次推送时具有自定义比较器分段错误的优先级队列

  5. 5

    优先级队列的自定义比较功能

  6. 6

    创建具有相反顺序的优先级队列

  7. 7

    自定义优先级队列比较器,用于访问类的私有成员

  8. 8

    自定义优先级队列比较器,用于访问类的私有成员

  9. 9

    具有自定义测试用例优先级的测试结果图表

  10. 10

    带有自定义比较函数的 C++ 优先级队列在 Push() 时行为不正确

  11. 11

    为自定义创建的串行异步队列设置优先级

  12. 12

    如何在优先级队列中将functor用作自定义比较器

  13. 13

    内容具有优先级的内容不适用于UIStackView中的自定义视图和标签

  14. 14

    如何在C ++中定义具有四个值的优先级队列?

  15. 15

    具有两个优先级Python的优先级队列

  16. 16

    具有两个优先级值的优先级队列

  17. 17

    具有两个优先级Python的优先级队列

  18. 18

    具有减少键操作的Javascript优先级队列

  19. 19

    自定义和内置Directve之间的优先级

  20. 20

    需要想法使用优先级队列在数据结构中自定义算法

  21. 21

    定义自定义转换器时,哪一个在FacesConverter批注中的value和forClass之间具有更高的优先级?

  22. 22

    定义自定义转换器时,哪一个在FacesConverter批注中的value和forClass之间具有更高的优先级?

  23. 23

    对具有较高优先级的一系列元素和具有较低优先级的其他元素的优先级队列进行排序

  24. 24

    如果多个元素具有相同的优先级,Python中是否有“ Lifo”类型的优先级队列?

  25. 25

    C ++实现具有不同优先级功能的优先级队列的最佳方法是什么?

  26. 26

    如何优先于默认Angular-material CSS的自定义CSS优先级

  27. 27

    如何在PyMC3中定义自定义优先级

  28. 28

    如何在PyMC3中定义自定义优先级

  29. 29

    如何用O(logN)排序具有n个元素的优先级队列?

热门标签

归档