C++ における順序なしコンテナと順序ありコンテナの詳細な比較

C++ における順序なしコンテナと順序ありコンテナの詳細な比較

C++ STL (標準テンプレート ライブラリ) では、コンテナーはデータを格納するために使用されるクラス テンプレートです。コンテナ内の要素がソートされているかどうかによって、コンテナは大まかに順序なしコンテナと順序ありコンテナに分けられます。この記事では、これら 2 種類のコンテナーの違いについて説明し、具体的なコード例を通じてその違いを説明します。

1. 注文されたコンテナ

順序付けられたコンテナ内の要素は自動的に並べ替えられます。 C++ STLでは、典型的な順序付きコンテナ

これらには、std::vector (std::sort でソートされている場合)、std::deque (これもソートされている場合)、std::list (ソートされている場合)、std::set、std::multiset、std::map、std::multimap が含まれます。

たとえば、std::set は、内部要素が自動的にソートされ、重複する要素を許可しないコンテナです。以下は std::set を使用する簡単な例です。

 #include <iostream> #include <set> int main() { std::set<int> s; s.insert(5); s.insert(3); s.insert(7); s.insert(1); s.insert(4); for (int num : s) { std::cout << num << " "; } std::cout << std::endl; return 0; }

このコードは 1 3 4 5 7 を出力します。要素が自動的にソートされていることがわかります。

2. 順序付けされていないコンテナ

順序付けされたコンテナとは異なり、順序付けされていないコンテナ内の要素は自動的にはソートされません。 C++ STL の順序なしコンテナーには、主に std::unordered_set、std::unordered_multiset、std::unordered_map、std::unordered_multimap が含まれます。

これらの順序付けられていないコンテナはハッシュ テーブルに基づいて実装されるため、要素の挿入、削除、および検索操作の平均時間計算量は通常 O(1) になります (理想的なケースでは、ハッシュ関数が適切に設計され、衝突はありません)。ただし、ハッシュ衝突の可能性があるため、最悪の場合、これらの操作の時間計算量は O(n) にまで上昇する可能性があります。

以下は std::unordered_set を使用する簡単な例です。

 #include <iostream> #include <unordered_set> int main() { std::unordered_set<int> us; us.insert(5); us.insert(3); us.insert(7); us.insert(1); us.insert(4); for (int num : us) { std::cout << num << " "; } std::cout << std::endl; return 0; }

std::unordered_set は順序付けられていないため、このコードの出力は 5 7 1 3 4 のようになります (出力順序はハッシュ関数と内部実装によって異なる場合があります)。

3. パフォーマンス比較

1. 時間の計算量:

  • 順序付きコンテナ (std::set など) の挿入、削除、検索操作の時間計算量は、通常、赤黒木などのバランス検索木に基づいて実装されるため、O(log n) になります。
  • 順序付けされていないコンテナ (std::unordered_set など) では、挿入、削除、検索操作の平均時間計算量は O(1) です (ハッシュ関数が適切に設計されており、衝突がないと仮定した場合)。ただし、ハッシュ衝突により、最悪の場合、これらの操作の時間計算量は O(n) にまで上昇する可能性があります。

2. 空間の複雑さ:

  • 順序付けられたコンテナーはツリー構造に基づいて実装されるため、通常は追加のスペースが少なくて済みます。
  • 順序付けられていないコンテナーでは、ハッシュ テーブルを保存し、ハッシュの衝突を処理するために、追加のスペースが必要になる場合があります。

4. 使用シナリオ

  • 頻繁に検索、挿入、削除操作を実行する必要があり、要素の順序に特別な要件がない場合は、順序なしコンテナーの方が、検索、挿入、削除の平均時間が短いため、より適切な選択肢となる可能性があります。
  • コンテナ内の要素を順序付けたままにする必要がある場合、または範囲検索 (たとえば、特定の値未満のすべての要素を検索する) を実行する必要がある場合は、順序付けされたコンテナの方が適している可能性があります。

V. 結論

C++ の順序なしコンテナーと順序付きコンテナーでは、内部実装、パフォーマンス、および使用シナリオに大きな違いがあります。順序付けされていないコンテナーはハッシュ テーブルに基づいて実装され、平均検索、挿入、削除の時間が短くなりますが、より多くのスペースを占有する可能性があります。順序付きコンテナは、バランス検索ツリーなどのデータ構造に基づいて実装されます。要素は自動的にソートされますが、検索、挿入、削除操作の時間的複雑さは比較的高くなります。使用するコンテナの選択は、特定のニーズとパフォーマンス要件に基づいて行う必要があります。

<<:  パブリック クラウドの弾力性を活用するのが難しいのはなぜですか?

>>:  Harbor はネットワークなしでも展開できますか?オフラインインストールガイドはこちら!

推薦する

ダイエットのためのタオバオSEOのひどい現状と今後の方向性

私の友人の多くはタオバオアフィリエイトプログラムに参加しており、その多くがお金を稼いでいます。私も同...

ウェブサイトの計画をうまく進めたい場合、どこから始めればよいでしょうか?

ウェブサイトの計画は、優れたウェブサイトを構築するための重要なステップの 1 つです。優れたウェブサ...

impactshared-$2.5/年/ウェブホスティング/Cpanel/ダラス

impactshared.com (Subnet Labs, LLC 傘下の仮想ホスティング ブラン...

姿勢が身長を決める。まずはウェブサイトのQ&Aセクションの単語数から見ていきましょう。

ここ二日間、私はウェブサイトのQ&AセクションのSEOについて調査してきました。医療、法律、...

マルチクラウドアーキテクチャを計画する方法

マルチクラウド アーキテクチャは現在、ほとんどの組織が採用しているクラウド コンピューティング戦略の...

反省:IDC業界の「熱」と「賞賛」に合理的に対処する方法

中国の情報化の発展に伴い、IDC業界は今や発展の黄金期に入っている。オンラインゲーム、情報決済、仮想...

cmivps: 香港 cn2 回線 VPS、20Mbps 帯域幅、KVM 仮想化、月額 7 ドルから

新興業者の cmivps は、CN2 回線と 20Mbps の帯域幅を使用して、KVM 仮想化に基づ...

インターネットマーケティングのトレーニングは色を変え、疑問視されているMLMモデルを導入している

近年、電子商取引は急速に発展しています。電子商取引が支配するインターネットマーケティングは、当然のこ...

安定した VPS の推奨: 2 月の photonvps 30% 割引コード [5 つ星推奨]

PhotonVPSはお馴染みのIDC(Fantong VPSと呼んでいます)、こちらはHostCat...

zipvps-1g メモリ kvm/50g ハードディスク/1T トラフィック/G ポート/ニューヨーク/月額 6.5 ドル

zipvps はいくつかのプロモーションを行ってきました。ワンマン商人ホスト猫として、これまでここで...

伝統メディアによる今日頭条ボイコットはどんなシグナルを発しているのだろうか?

6月3日、「データマイニングに基づくパーソナライズされた情報推奨エンジン」を提供するアプリ「今日頭条...

AWS アカウントを登録して EC2 無料利用枠を作成する詳細なチュートリアル

AWS EC2 (正式名称は Amazon Elastic Compute Cloud) は、クラウ...

純粋なコンテンツプラットフォームは衰退し、自社制作コンテンツが増加している

まず、最近の事実をいくつか紹介します。 1. Youku は 2013 年第 4 四半期も依然として...

有能なSEO担当者が備えるべきいくつかのこと

SEO 最適化といえば、私が取り上げる特別なトピックです。記事の長さの関係で、私の理解に基づいた S...

SEO の基礎: 404 エラー ページのケース スタディ

ウェブサイトを開いても長時間応答がなかったり、URL が間違っていたりすると、次のような画面が表示さ...