优先级队列默认排序

时间:2015-03-06 14:55:50

标签: java priority-queue

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

struc是点结构。 当我提供:

(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这些因素 - 关系被任意打破。“

有人可以帮忙解释一下吗?

2 个答案:

答案 0 :(得分:2)

订单 未定义,因为他们的x坐标值是绑定所有点绑定相同。如果您希望获得相同的订单,则应通过修改compare()实施来强制执行此操作,以便同时考虑其y坐标值。

而且,即使订单由于某种原因而变得相同,但程序依赖于未定义的行为以确保其正确性是不正确的。

答案 1 :(得分:1)

答案在你引用的文档中:“关系被任意打破”意味着PQ可以在看到平局时做任何想做的事情,包括随机改变你的输入。

所有输入都具有相同的x坐标,因此它们都是并列的,优先级队列可以“任意地”处理它,意思是它想要的任何方式,没有任何保证。