順序付けされたSTLコンテナと順序付けられていないSTLコンテナの違いは何ですか?順序付けされた順序付けられていないSTLコンテナ
答えて
順序付けられた順序付けられていない順序は、コンテナに対して推移的に適用されます。
あなたが興味を持っているのは、シーケンスです。これは、コンテナを繰り返し(おそらくスライス)繰り返したときに要素が表示される順序です。
シーケンスはより一般的ですが、この種の概念では、STLの背後に潜んでいるさまざまな概念のタクソノミを見つけることができるときにSGI STL website(現在のSTLの母親)を参照します。
まず、Sequence。このシーケンスで興味深いのは、それを変更せずに2回横断すると、同じ順序で要素が生成されるという保証はないということです。これは、たとえば、最後の要素を最初に移動して、何らかの形のキャッシングを実装するコンテナの場合です。この場合、繰り返しはコンテナを効果的に逆転させます。
は、基準の順序が固定されたコンテナであり、そしてそれは、その要素のスライスを反復するたびに、常に彼らがこの基準に従って順序付け遭遇するだろうことを保証します。これに対して、Hashed Associative Containerは異なります。順序付け基準の代わりに、それはハッシングを使用する。 SGI STLはバケツを使用しなければならないということも厳密には厳しく制限されています。ここでは、反復は基本的に順序付けられていません。要素がどのように出るかは全く制御できません。また、再ハッシングに何らかのランダム性が適用されている場合、プログラムの実行ごとに同一ではないかもしれません。
順不同コンテナ、彼らは名前がhash_set
とhash_map
の既存の実装と衝突したくなかったので、彼らは、ブーストおよびC++ 0xのために思い付いた用語です。したがって、SGI STLに記載されていないものの、順序付けされていない種類は、以前のハッシュされた種類に近似します。あなたが本当に知っている必要があり何
:を順序は、要素が順不同が(全く)オーダーの何種類が施行されていないことを意味しているソート出てくることを意味します。注文は費用がかかりますので、必要なときにのみお支払いください。たとえば、Python dict
は実際には順序付けられていません。
私は本当にここ用語連想好きではありません。 1はset
要素が一度にキーと値の両方でこの要件のモデルであることを考えるとき、それは、他の回答に加えて... 2個の順不同コンテナ(いない要素の 平等テスト
主な違いは、イテレータをインクリメントして順序付きコンテナを反復処理すると、キーの順にコンテナの要素にアクセスすることです。
これは、順序付けられていないコンテナでは必ずしも成立しません。
順序付けられていないコレクション(tr1::unordered_map
およびtr1::unordered_set
)は、一般にハッシュテーブルの実装を通じて値を取得します。これは、O(1)の償却平均ルックアップを与える。
注文コレクション(std::map
およびstd::set
)はノードベースです。これらのコレクションは、O(ログ)時間内に値を取得します。
検索だけでなく挿入も同様です。 –
比較されたSTLコンテナは比較に基づいています。たとえば、std :: setは通常、赤黒のツリーとして実装されます。順序付けられていないSTLコンテナはハッシュアルゴリズムに基づいており、unordered_setはハッシュテーブルです。
通常、順序付けられていないコンテナは、挿入、参照、削除などの操作に必要なアルゴリズムコストが高くなります。しかし、その一定のコストはかなり高く、カスタムタイプのハッシュは場合によっては軽微である場合があります。順序付けられていないコンテナを特定の順序で反復することも不可能です。
通常、カスタムタイプの拡張は一般的に簡単であるため、コンテナのパフォーマンスが問題であると特定されない限り、ほとんどの用途でオーダーされたコンテナを使用します。
最初に:std::(map|set)
と0xstd::unordered_(map|set)
を話していると思います。まず、明白なことは、注文された容器が内容を保持していることです。これは、何かを挿入するときに余分な作業が必要であることを意味します(最初に挿入する場所を見つける必要があるため)。しかし、2つの要素を比較する方法(つまり、1つが他の要素より少ない場合)を指定する必要があります(組み込み型でない場合は、組み込み型のように)。順序付けられていないコンテナは内容を順序付ける必要はありませんが、挿入と要素のアクセスは高速ですが、(カスタムタイプの場合は)良いハッシュ関数と同等性のテストが必要です。
他の返信でもう一度見落とされることがもう1つあります。順序付きコンテナは、operator<
を使用するか、Traitsクラスoperator()
を使用して厳密な弱い順序が必要です。その結果、それらのコンテナを反復することは、それらの関数に従って順序付けられます。順序付けられていないコンテナは、同じことを行う述語関数の等価比較演算子のみを必要とします。したがって、コンテナ内の要素の順序付けはありません(バケットの内部順序付けを除く)。
少し誤解を招くようです)は、 の順序付けられていない性質のために難しい。 可能ですが、高価な場合があります。
- 1. 順序付きリストと順序付けられていないリンクリストの検索
- 2. フォーム検証 - 順序付けられていないリスト
- 3. 順序付けられていない型のJaxbシーケンス
- 4. ルビーの順序付けられていないカップル
- 5. Javaの順序付けられていないペア
- 6. TreeSetの順序付けエラー
- 7. C++テンプレートコンテナクラス:順序付けられたアイテムタイプと順序付けされていないアイテムタイプの両方を最適にサポートする方法
- 8. NHibernateの順序付きリストコレクションは、その順序でフェッチされていない
- 9. 順序付き/順序なしリストの高さが返されない
- 10. jqueryの複数レベルのXMLから順序付けられていないリスト
- 11. 色HTMLで順序付けられたリスト
- 12. 順序付けられた値のペアをフェッチする
- 13. Cassandraのロードバランシングと順序付けられたパーティショナー?
- 14. jsonを順序付けられていないリストで解析する
- 15. CSS定義リスト - 順序付けられていないリストでインラインに移動
- 16. 順序付けられていないX座標対+濃度等高線
- 17. JavaScriptで順序付けられていないリストにURLを生成する
- 18. Pythonで索引付け可能な弱い順序付きセット
- 19. Javaの順序付けされたHashableコレクション
- 20. 階層型の順序付けされたキー値ストア?
- 21. 順序付けされていない画像を並べ替える方法
- 22. 順序付けされていないリストCSSスタイルがフラッシュにあります
- 23. 垂直整列順序付けされていないリストのナビゲーションリンク?
- 24. スキーマフィールドのレール移動の順序付け
- 25. spring @Beanフィルタの順序付け
- 26. カテゴリ要素の順序付け
- 27. 列/行による順序付け値
- 28. "NSSet allObjects"はランダムな順序付けをしていますか?
- 29. jQueryを使用してネストされた順序付けられていないリストをブレッドクラムに変換する
- 30. JEditorPane内のピクセルで照合された順序付けられていない箇条書き
コンテナにキーがない場合、イテレータは照合シーケンスによって要素を訪問します。 –