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
坐标值来强制执行该命令。
而且,即使顺序由于某种原因而相同,对于您的程序来说,依靠未定义行为来确保其正确性也是不正确的。