std::setとstd::vectorの違いは何ですか?
質問
私は今STLを学んでいます。私は
set
コンテナについて読みました。私はあなたが使用したいときに質問があります
set
? 読み終わった後
セットの説明
で代用できるため、無駄なようです。
vector
. の長所と短所を教えてください。
vector
対
set
のコンテナです。ありがとうございます。
どのように解決するのですか?
A
set
は順序があります。それは
保証
であり、あなたが提供するファンクタに従って、特定の順序を保つことが保証されています。どのような要素を追加したり削除したりしても(重複を追加しない限り、 これは
set
では許されない重複を加えない限り)、常に順序が保たれます。
A
vector
は、まさに
だけ
を持つ。の項目は
vector
にある項目は、あなたが置いた場所にあります。もし順番を無視して入れたのなら、それは順番が狂っていることになります。
sort
をクリックして、順序を元に戻してください。
認める。
set
は比較的限られた用途しか持ちません。適切な規律があれば、項目を
vector
にアイテムを挿入し、それを秩序立てておくことができます。しかし、常にコンテナにアイテムを挿入したり取り出したりするのであれば
vector
は多くの問題に直面することになります。それは事実上単なる配列であるため、要素のコピー/移動などを大量に行うことになります。
に項目を挿入するのにかかる時間は、1時間未満です。
vector
に挿入するのにかかる時間は、既にあるアイテムの数に比例します。
vector
. にアイテムを挿入するのにかかる時間は、そのアイテムの数に比例します。
set
は
log₂
に比例します。項目数が多ければ、それは大きな違いです。log₂(10万)は~16で、これは大きな速度改善です。削除も同様です。
しかし、挿入をすべて一度に、初期化時に行うのであれば、問題はないでしょう。すべてを挿入して
vector
に挿入し、それをソートし (その代償を一度支払うことになります)、そしてソートされた
vectors
の標準的なアルゴリズムを使って要素を見つけ、ソートされたリストを反復処理します。そして
set
の要素に対する繰り返しは必ずしも遅くはありませんが
vector
を反復する方が速いです。
ということは、ソートされた
vector
に勝るとも劣らない
set
. とはいえ、この種の最適化が必要だとわかっていない限り、わざわざ費用をかける必要はないでしょう。ですから
set
が必要だとわかるようなプロファイリングデータが手元にない限りは、 vector
ではなく
set
.
関連
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み】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++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。