60GB のテキストを解析し、マップで多くの挿入と検索を行います。私はboost::unordered_setとboost::unordered_mapを使い始めたばかりで、私のプログラムがこれらのコンテナに詰め込み始めると、コンテナはどんどん大きくなり始め、これらのコンテナにメモリを事前に割り当てるのが良い考えかどうか疑問に思っていました. mymap::get_allocator().allocate(N); のようなもの ?
それとも、それらをそのままにして、成長因子を自分で割り当てて把握する必要がありますか? コードは次のようになります
boost::unordered_map <string,long> words_vs_frequency, wordpair_vs_frequency;
boost::unordered_map <string,float> word_vs_probability, wordpair_vs_probability,
wordpair_vs_MI;
//... ... ...
N = words_vs_frequency.size();
long y =0; float MIWij =0.0f, maxMI=-999999.0f;
for (boost::unordered_map <string,long>::iterator i=wordpair_vs_frequency.begin();
i!=wordpair_vs_frequency.end(); ++i){
if (i->second >= BIGRAM_OCCURANCE_THRESHOLD)
{
y++;
Wij = i->first;
WordPairToWords(Wij, Wi,Wj);
MIWij = log ( wordpair_vs_probability[Wij] /
(word_vs_probability[Wi] * word_vs_probability[Wj])
);
// keeping only the pairs which MI value greater than
if (MIWij > MUTUAL_INFORMATION_THRESHOLD)
wordpair_vs_MI[ Wij ] = MIWij;
if(MIWij > maxMI )
maxMI = MIWij;
}
}
前もって感謝します