1. ホーム
  2. c++

[解決済み] C++の標準ライブラリにmaxheapはありますか?

2022-03-15 10:41:07

質問

は知っています。 std::priority_queue クラスはミニヒープを実装しています。これをマックスヒープとして使う方法はないのでしょうか?あるいは、別のマックスヒープの構造があるのでしょうか?私は std::make_heap() 関数で std::vector のような関数を使用して、自分自身のMaxheapを作成するためにlambdaを使用します。 std::pop_heap() は変だし、使い勝手が悪いと思う。min_heap(priority queue)のようにもっと簡単な方法があるはずだと思います。

解決方法は?

について std::priority_queue :

ユーザーが提供する Compare を使用することで、順序を変更することができます。 std::greater<T> を指定すると 最小の要素 として表示されます。 top() .

から std::less<T> はデフォルトのテンプレート引数で Compare テンプレートパラメータを使用する場合、それはすでに 最大ヒープ をデフォルトで使用します。もし ミニヒープ の代わりに(上記の引用文が示唆するように)、以下のようにします。 std::greater<T> の代わりに std::less<T> をテンプレートの引数として指定します。

要約すると

  • 最大ヒープ:パス std::less<T> (これはデフォルトのテンプレート引数です)。
  • 最小ヒープ:パス std::greater<T> .

注意点 std::priority_queue は、実際には コンテナアダプタ (データ構造とは対照的に)。どのような基礎データ構造を使用しているかは特定しない。しかし、指定されたランタイムの複雑な操作のために push() , pop()top() ということは、ヒープとして実装されている可能性が高い。