C++ std::priority_queue 只需要一个部分顺序。但是如果它的实现是一个二叉堆,它是如何工作的呢?例如:假设我们有一个偏序集( {a, b, c, x}, {c < b, b < a, c < a} )
,与, ,x
无关。那么最大堆是:a
b
c
layer 1: x
layer 2: b x
layer 3: x x a c
弹出操作后,以教科书常见的方式,即替换根c
并减小大小1。然后我们需要在根处对下面的树进行heapify:
layer 1: c
layer 2: b x
layer 3: x x a
我们将交换c
和b
as c < b
,不是吗?什么?我们仍然没有一个有效的堆,因为b < a
. 但b
不能“看到” a
。