次のメンバー関数がによって提供されているという事実はstd::unordered_map
、それがハッシュテーブルに基づいていることを示唆しています。おそらく
、リンクリストを使用した個別のチェーンです。
bucket_count, hash_function, load_factor, max_load_count, rehash
要素が隣接しているかどうかは、アロケータによって異なります。およびのデフォルトのアロケータは、連続するメモリに要素を割り当てません。unordered_map
list
各要素のメモリは、挿入時に割り当てられます。
ただし、事前に割り当てられたメモリプールから要素を割り当てることができるカスタムアロケータ(プールアロケータなど)を提供できます。それでも、データ構造内の論理的に隣接する要素は、メモリ内で物理的に隣接していない可能性があります。
したがって、すべての要素をループすることが最も頻繁な操作であるunordered_map
場合、は最善の解決策ではない可能性があります。競合するすべてのソリューションのプロファイラーを介して主要なユースケースを実行すると、最良のソリューションが明らかになります。
それに加えて、unordered_map
別の理由でループするのは最良の選択ではありません。名前に「 unordered 」という単語が含まれていることに注意してください。これは、、、、またはとは異なりlist
、要素の順序がないことを示していvector
ます。たとえば、メンバー関数は要素の相対的な順序を変更する場合があります。実際、
再ハッシュは、操作中に負荷率が超過するたびに、コンテナーによって自動的に実行されます。map
rehash
max_load_factor