Comparator<struc> cmp= new Comparator<struc>() {
  public int compare(struc e1, struc e2) {
    return e1.x - e2.x;
  }
};


结构是点结构。
当我提供:

(3,1)(3,2)(3,3)(3,4)

q给我:

(3,1)(3,4),(3,3)(3,2)

当我提供:

(3,1)(3,3)(3,2)(3,4)

它给了我:

(3,1)(3,4),(3,2)(3,3)

逻辑是什么?

因为不比较key_in,是否应该只给出y顺序?
当我检查API时,它告诉我“基于优先级堆的无限制优先级队列...相对于指定的顺序,此队列的头是最小的元素。如果多个元素的值最小,则头为1这些要素中的—关系是任意打破的。”

有人可以帮忙解释吗?

最佳答案

这里的顺序不确定,因为您的所有点都相互关联,因为它们的x坐标值相同。如果期望具有相同的顺序,则应通过修改compare()实现以兼顾其y坐标值来强制执行该命令。

而且,即使顺序由于某种原因而相同,对于您的程序来说,依靠未定义行为来确保其正确性也是不正确的。

07-28 13:18