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
ポップ操作の後、教科書で一般的に見られる方法で、つまり、ルートを1に置き換え、c
サイズを1つ減らします。次に、ルートの下にあるツリーをヒープ化する必要があります。
layer 1: c
layer 2: b x
layer 3: x x a
交換c
しb
ますc < b
ね。そして何?以来、まだ有効なヒープがありませんb < a
。しかしb
、「見る」ことはできませんa
。