[解決済み] C++の標準ライブラリにmaxheapはありますか?
質問
は知っています。
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()
ということは、ヒープとして実装されている可能性が高い。
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] STL」と「C++ Standard Library」の違いは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む