C ++ std :: priority_queueは、部分的な順序が必要です。しかし、その実装がバイナリヒープの場合、どのように機能しますか?( {a, b, c, x}, {c < b, b < a, c < a} )例:半順序集合があり、、、とxは何の関係もないと仮定aします。その場合、最大ヒープは次のようになります。bc
layer 1: x
layer 2: b x
layer 3: x x a c
ポップ操作の後、教科書で一般的に見られる方法で、つまり、ルートを1に置き換え、cサイズを1つ減らします。次に、ルートの下にあるツリーをヒープ化する必要があります。
layer 1: c
layer 2: b x
layer 3: x x a
交換cしbますc < bね。そして何?以来、まだ有効なヒープがありませんb < a。しかしb、「見る」ことはできませんa。