クラス A のオブジェクト (数千万) の大きな配列があり、ベクトルをメンバーとしてクラス A に追加したいと考えています。このベクトルは、配列内のオブジェクトの数パーセントにのみ必要です。クラスにベクトルを追加するのは賢明な選択でしょうか? 空のベクトルはどのくらいのメモリを使用しますか?
1 に答える
1
これで、空のベクターはそれほど「大きく」ないことがわかりました (VC2012x64 Intellisense ショーsizeof(std::vector<int>)
は 16 バイトです)。がベクトルのサイズよりもはるかに大きい場合sizeof(A)
、ベクトル メンバーを A に追加すると、適切な解決策になる可能性があります。しかし、それが良くなく、多くのメモリを追加し、ベクトルを持つ A が実際には多くない場合は、ベクトルを含む 2 番目のコンテナーを作成します。例えば:
#include <unordered_map>
unordered_map<size_t , vector<T>> VectorForA;
size_t は、A の大きな配列のインデックスの型であり、Avector<T>
に追加するベクトルの型であることを意味します。これは、固定インデックスの「大きな」配列に適しています。どういうわけか、大きな配列の A の位置が固定されていない場合、A の値をキーにすると、コードが単純になります (A の値が繰り返されない場合のみ)。
注:私は(私は)@Andy Prowlまたは@Tony Dからの完全な回答を待っていましたが、非常に役立つと思います
于 2013-01-28T09:07:55.367 に答える