问题标签 [comparator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5325 浏览

scala - Scala: Is there a way to use PriorityQueue like I would in Java?

I have a class that I would like to use in a scala.collection.mutable.PriorityQueue, but I don't want to make it Ordered[A] just for this one purpose. I don't consider the ordering I want to use with respect to the PriorityQueue as the natural ordering of the class.

So, in my PriorityQueue, I would like the values to be ordered by 'sequence'. However, just because two objects have the same sequence doesn't make them naturally equal since the contents of their 'values' may be different.

This is where, in Java, it's nice to be able to supply an alternate Comparator object to the PriorityQueue. My Comparator would simply order the objects with respect to their 'sequence' and ignores their 'values'.

The PriorityQueue class must be parameterized with a "A <% Ordered[A]"

From what I've read, this means my class must extend Ordered[A] or I must provide an "implicit def" type conversion to Ordered[A], which, honestly, feels inelegant.

The Java solution seems more "functional" allowing me to pass a Comparator function-like object instead of forcing me into a class hierarchy or monkeypatching my class.

I realize there are alternatives to using PrioirityQueue, but I feel like I may be bumping up against the Scala learning curve here and don't want to give up without exploring this design decision fully.

Is this just an unfortunate decision in the Scala library or am I misunderstanding some sort of calling convention that makes PriorityQueue more usable and 'functional'?

Thanks

0 投票
2 回答
1513 浏览

java - Java:填充两个向量并对它们进行排序

如何填充两个向量并将它们相互组合(索引或类中的对象类型)。我想如果我使用索引来组合它们,那么排序可以用 Collections.sort 处理,否则我必须创建一个比较器。

我们必须按照 Java 1.4 约定进行编码。

让你的想象更轻松;它是一个具有排序向量(行)和内容向量(所有列)的网格。它们需要填充到向量中并进行排序。

上下文:我有一个 GridBagLayout,其中包含以奇怪的顺序排列的所有组件。我需要循环浏览所有组件并以正确的网格顺序(gridx,gridy)填充它们。对于那个解决方案,我考虑了两个向量,一个定义行并指向包含它的 cols 的向量。要么在填充向量时解决排序问题,要么我必须在第二步对其进行排序。我猜对于 java 4,除了包含一个对象的两个向量之外没有其他方法,对吧?

0 投票
8 回答
2071 浏览

java - 有一个可以动态更改顺序的Java比较器可以吗?

我有一组带时间戳的值,我想将它们放在一个排序集中。

对这个集合进行排序的业务逻辑表明,值必须按值降序排列,除非它比最新值早 7 天以上

所以作为一个测试,我想出了下面的代码......

如您所见,最初第一个值比第二个值更相关,但是一旦将最终值添加到集合中,第一个值已经过期并且应该是最不相关的。

我最初的测试表明这应该可以工作......随着更多值的添加,TreeSet 将动态地重新排序整个列表。

但即使我看到它,我也不确定我是否相信它。

添加每个元素时,排序集合是否会重新排序整个集合?以这种方式使用排序集合是否有任何问题(即性能)?在添加所有值之后手动对列表进行排序会更好吗(我猜会是这样)?



追问: 正如很多人(甚至在某种程度上我)怀疑的那样,排序的集合不支持这种“动态重新排序”的方式。我相信我最初的测试是偶然的。当我向集合中添加更多元素时,“顺序”很快就崩溃了。感谢所有伟大的回应,我重构了我的代码以使用你们许多人建议的方法。

0 投票
3 回答
4586 浏览

c++ - C++ std::set 比较器

这是代码:

这就是问题所在:

调试断言失败!
文件:..\VC\include\xtree
行:638

表达式:无效的运算符<

之后,我可以选择“中止”、“重试”或“忽略”。如果我选择忽略更多(相同的)出现,但它最终会完美运行。

当我将带有 ->Amount == 的 Reputation 插入到之前插入的 Reputation * 之一时,似乎会出现问题,但我不确定最后一个。

任何帮助将不胜感激

编辑:我希望它们的顺序首先是按升序排列的正序,然后是按降序排列的负序。示例:1 5 10 11 11 20 50 -1 -5 -50

0 投票
3 回答
3570 浏览

c++ - 使用自定义比较器在 std::list::sort 中出错(预期的主表达式在 ')' 标记之前)

标题是主要问题。确切的场景(我正在使用命名空间 std;'):

这是比较器的定义:

比较器的实现既直观又简单。我还在 std::set 中使用了一个非常相似的比较器,它工作正常。当我添加 sortByOccurrence() 函数时,它给了我标题中的错误。

我该怎么办?

编辑:我现在尝试将 Substring::OccurrenceComparator() 作为比较器传递,并且收到以下错误:

我的代码行现在是:

我无法删除模板,或者它给我一个错误,说模板参数错误。

0 投票
5 回答
2534 浏览

java - 为二进制搜索的复合对象编写比较器

我有一个类和实例列表,看起来像这样(更改了字段名称以保护无辜/专有):

该列表bloatList由内部保存BloatProducer并以这样的方式维护:它只附加新Bloat记录,不修改任何旧记录,并且每个字段都是单调递增的,例如bloatProducer.testMonotonicity()总是返回true

我想使用timeInMilliseconds、spaceInBytes 或 costInPennies 字段Collections.binarySearch(list,key,comparator)来搜索记录。Bloat(如果数字在两条记录之间,我想找到上一条记录)

编写一系列 3 个比较器类以使其工作的最简单方法是什么?我是否必须使用带有虚拟字段的 Bloat 对象作为我不搜索的键?

0 投票
2 回答
10975 浏览

java - Junit 内联比较器初始化错误

我创建了一个 SortedList 类,它有一个以 java.util.Comparator 作为参数的构造函数。

在我的机器上运行单元测试后(通过 eclipse 3.3.0),一切正常。然而,哈德森抱怨,因为它说它不能实例化我的比较器。

这是我的简单测试(片段)

或者另一种方式:

哈德森显示的错误是

ar.com.lib.SortedListTest$strcmp.initializationError0

错误信息

测试类应该有公共的零参数构造函数

堆栈跟踪

java.lang.Exception:测试类应在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 处的 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 处具有公共零参数构造函数作者:java.lang.NoSuchMethodException:ar.com.lib.SortedListTest$strcmp.() at java.lang.Class.getConstructor0(Class.java:2706) at java.lang.Class.getConstructor(Class.java:1657)

我尝试过使用 @Ignore 注释,但到目前为止还没有运气。当我尝试时它不会编译

任何想法将不胜感激。提前致谢。

0 投票
5 回答
13375 浏览

java - 无论如何,将空值排序到底部的好通用方法?

我正在编写一些自定义比较器,我希望它们将空项目推到列表的底部,无论我是按升序还是降序排序。解决这个问题的好策略或模式是什么?

副手:

  • 只需编写单独的升序和降序比较器,尽可能共享代码
  • 通过抛出 NPE 或显式调用它,将 null 处理委托给另一个类
  • 包括一个升旗并在其中放置条件逻辑以绕过空值
  • 在空处理类中包装常规比较器

还有其他策略吗?我想听听不同方法的任何经验,以及各种策略的任何陷阱。

0 投票
8 回答
82021 浏览

java - Java中的自然排序顺序字符串比较 - 是内置的吗?

我想要某种保留自然排序顺序的字符串比较函数1。Java中是否有类似的东西?我在String 类中找不到任何东西,而Comparator 类只知道两个实现。

我可以自己动手(这不是一个很难的问题),但如果我不需要,我宁愿不重新发明轮子。

在我的具体情况下,我有要排序的软件版本字符串。所以我希望“1.2.10.5”被认为大于“1.2.9.1”。


1 “自然”排序顺序是指它以人类比较字符串的方式比较字符串,而不是仅对程序员有意义的“ascii-betical”排序顺序。换言之,“image9.jpg”小于“image10.jpg”,“album1set2page9photo1.jpg”小于“album1set2page10photo5.jpg”,“1.2.9.1”小于“1.2.10.5”

0 投票
5 回答
43326 浏览

java - Java:SortedMap、TreeMap、Comparable?如何使用?

我有一个对象列表,我需要根据其中一个字段的属性对其进行排序。我听说 SortedMap 和 Comparators 是最好的方法。

  1. 我是实现 Comparable 与我正在排序的类,还是创建一个新类?
  2. 如何实例化 SortedMap 并传入 Comparator?
  3. 排序是如何工作的?它会在插入新对象时自动对所有内容进行排序吗?

编辑: 这段代码给了我一个错误:

(Ktr 实现Comparator<Ktr>)。Eclipse 说它期待类似的东西TreeMap<K, V>,所以我提供的参数数量不正确。