2016-10-18 9 views
0

私はそのインデックスとしてペアを持つマップを持っています。私はその中の要素を訪問するのに多くの時間がかかることが分かった。プロセスを加速するいくつかの方法があるかどうかを知りたいですか?私のコードは次の通りである:C++のペアインデックスを使用してマップを高速化するにはどうすればよいですか?

std::vector words; 
...to generate a words vector... 
std::map<std::pair<std::string, std::string>, int> wordCountMap; 
wordsSize = words.size() 
for(int i = 0; i < wordsSize; ++i){ 
    for(int j = i + 1; j < min(i + e, wordsSize); ++j){ 
     std::pair<std::string, std::string> pk = words[i] < words[j] ? std::make_pair(words[i], words[j]) : std::make_pair(words[j], words[i]); 
     wordPairCountMap[pk] = wordPairCountMap.find(pk) != wordPairCountMap.end() ? wordPairCountMap[pk] + 1 : 1; 
    } 
} 

私はペアインデックス付きマップの構築は多くの時間を要することがわかりました。どのように私はそれを最適化できますか?

+0

で文字列のコピーの多くを行うことを「私はペアインデックス付きマップの訪問は多くの時間を要することがわかりました。」あなたは 'wordCountMap'をどのように構築するかだけを見せてくれるのですが、構築後のあなたの通常のシナリオについては暗闇の中で教えてください。このように、私たちは潜在的な提案がこの 'wordCountMap'を消​​費するコードにどれだけ影響を与える(助けても妨げてもよい)のかどうかはまったく分かりません。 –

+0

StackOverflowの質問では、問題を調査し、尋ねる前に完全に理解しようとしたことを示す必要があります。 –

+0

@AdrianColomitchi forループの構築手順で時間がかかる。私は上記のforループの中でコードを最適化したいだけです。 – maple

答えて

1
++wordPairCountMap[pk]; 

余分な検索を避けるために

wordPairCountMap[pk] = wordPairCountMap.find(pk) != wordPairCountMap.end() ? 
          wordPairCountMap[pk] + 1 : 1; 

を交換することができます。

注意はまた、あなたがあなたのペア

+0

自動的に0に初期化されますか? – maple

+0

@maple: 'Value'は実際には値が初期化されるので、' int'では '0'になります。 – Jarod42

関連する問題