13

私はすでにこれを検索しようとしましたが、何も見つかりませんでした。

私はSTLコンテナについて学んでおり、シーケンシャルコンテナと連想コンテナの長所と短所を理解していますが、要素の挿入、検索、削除には影響しないため、連想コンテナよりも順序付けられていないコンテナを好む理由がわかりません。

それは純粋にパフォーマンス上の問題ですか。つまり、並べ替えを行う必要があるため、連想コンテナーへの挿入/削除にはより多くの処理が必要ですか? 私は物事のシステム側についてあまり知りませんが、頭の中で、順序付けられていないコンテナーは、自動的に編成されるコンテナーよりも多くの「維持」を必要とするように感じます。

誰かが光を当てることができれば、それは本当にありがたいです.

4

3 に答える 3

10

純粋に抽象的に、要素の順序付けはあなたが支払わなければならない余分な「機能」であるという事実を考慮してください。したがって、それが必要ない場合(ルックアップのみの辞書のように)、支払う必要はありません。それのための。

技術的には、これは、ハッシュテーブルを使用することで、順序付けされたコンテナのO(log n)ではなく、予想されるルックアップと挿入の複雑さO(1)で順序付けされていないコンテナを実装できることを意味します。

ただし、接線方向に関連する注記では、文字列をキーとして使用する場合、実用上大きな利点があります。順序付けられたコンテナは、ツリーウォークに沿ってすべての場所で完全な文字列比較を実行する必要がありますが、ハッシュコンテナは単一のハッシュ操作のみを実行します(非常に長い文字列から固定数の文字のみをサンプリングするように「最適化」されており、実際にははるかに高速であることがよくあります。

順序付けが必須でない場合は、両方のコンテナータイプ(インターフェイスはほぼ同じ)を試して使用状況プロファイルのパフォーマンスを比較するのが最善の方法です。

于 2013-01-25T20:27:08.590 に答える
3

Unordered Container は、オブジェクトの順序付けが必要なく、オブジェクト ルックアップのパフォーマンスを最も気にする場合に使用します。これは、Unordered Container が最速の検索/挿入を任意の場所で行うため、Ordered Container(Associative Container O(log n)) およびシーケンス コンテナーは O(n)) を使用します。

于 2016-11-30T10:31:17.610 に答える
2

not sure why anyone would prefer an unordered container over an associative one

Those features are not exclusive. A container may be associative, and if it is, separately may also be unordered.

If you are familiar with hash maps, that is the technology being leveraged by unordered containers. The standard library uses the term "unordered" instead of "hash" so as not to impose a specific technology when what is desired is just specific performance promises. (see comment)

于 2013-01-25T20:24:53.507 に答える