STLmap
サイズを初期化することは可能ですか?
最後にマップに含まれる要素の数がわかっているので、最初に必要なすべてのメモリを割り当てたいと思います。
いくつかのオプションがあります:
ステートフル アロケータで map を使用してみてください。たとえば、Boost.Containerまたは C++11 から。または、非ステートフル アロケータの制限を受け入れる場合は、C++98/03 のマップを使用することもできます。
unordered_map の使用を検討してください (Boost または C++11 から) - バケット数をコンストラクターのパラメーターとして使用します。厳密な弱い順序付けではなくハッシュに基づいているという点で、map とは異なります。
Boost.Container flat_[multi]map/set コンテナは、Austern と Alexandrescu のガイドラインに基づく、順序付きベクトル ベースの連想コンテナです。
どちらの選択が優れているかは、使用パターンによって異なります。
できません。木です(通常は赤黒木)。実際の値によってメモリ レイアウトが決まります。
ただし、次のことができます。
「フック」で装飾されたBoost Intrusiveマップ (ベクターなど、別のコンテナーに割り当てた要素を使用する) を使用して、その上にマップ機能を実装します。
アロケータで std::map を使用すると、固定の「プール」(メモリ領域) からすべての実際の要素を割り当てることができます。
私が考えることができる唯一のことは、その反復子コンストラクターを使用することです。唯一のトリックは、必要なサイズの別のコンテナーを作成し、そのイテレーターをコンストラクターに渡す必要があることです。