vectorは整数キーを持つunordered_mapの特殊な形式ですか?ベクトルにも整数キーがあるのでそう思われます。
そうでない場合、違いは何ですか?
主な違いは、データの保存方法です。
はvector
データを内部配列に格納し、サイズを変更して要素を追加します。Anunordered_map
は内部でハッシュ テーブルを使用します。
実際には、avector
を使用すると、後方で償却された一定時間の挿入 (時々すべてのサイズを変更してコピー/移動する必要があります)、インデックスによる一定時間のアクセス、および線形時間の挿入と削除 (後続のすべての要素が必要です) が可能になります。シフト)。また、avector
は連続しているため、C スタイルの配列を期待する関数に渡すことができます。
unordered_map
キーによる償却された一定時間のルックアップ (ハッシュは完全ではなく、衝突によりルックアップが内部リンクリストを通過するように強制されるため)、償却された一定時間の挿入と削除が提供されます。
参照: http://en.cppreference.com/w/cpp/container/unordered_map および: http://en.cppreference.com/w/cpp/container/vector
いいえ、aのインデックスvector
は連続的であるmap
必要はありません。
また、aの値は、vector
ではなく連続メモリにあることが保証されていmap
ます。
これらの2つは、2つの操作のほとんどで異なる複雑さを意味します。