[解決済み] std::setとstd::priority_queueの違いについて
2023-06-21 02:22:52
疑問点
どちらも
std::priority_queue
と
std::set
(そして
std::multiset
) は、要素を保存し、順番にアクセスできるデータコンテナで、同じ挿入の複雑さを持つ
O(log n)
を使用する利点は何でしょうか?(または、どのような状況でどちらかが必要なのでしょうか?)
基礎となる構造が異なることは知っていますが、私はその実装の違いにはあまり興味がなく、比較のために彼らの
パフォーマンス と 適合性 を、様々な用途で使用することができます。
注意
私はセット内の重複禁止について知っています。そのため、私はまた
std::multiset
と全く同じ挙動をするので
std::set
と全く同じ動作をしますが、格納されているデータが等しい要素として比較できる場合に使用することができます。ですから、単一キー/複数キーの問題についてはコメントしないでください。
どのように解決するのですか?
優先キュー のみ にアクセスできるようになります。 1 すなわち、最も優先順位の高い項目を取得し、それを削除すると次に優先順位の高い項目が取得できる、というようになります。優先度キューは要素の重複も許しますので、セットというよりマルチセットに近いですね。[編集:@Tadeusz Kopec が指摘したように、ヒープの構築もヒープ内の項目数に対して線形であり、集合の構築は既に順序付けられたシーケンスから構築されない限り O(N log N) です(この場合も線形です)]。
集合はソートされた順序でのフルアクセスを可能にするので、たとえば、集合の真ん中のどこかで2つの要素を見つけ、それから一方から他方へと順番にたどることができます。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
最新
-
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++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。