0

現在、WordCounter(MapReduce)を書いています。

私のreduce関数の実装は次のようになります。

void WordCounter::Reduce(string intermediateWord, vector<int> intermediateLineNr) {
    resultMap.insert(pair<string, vector<int> >(intermediateWord, intermediateLineNr));
    vector<int>& resultLineNr = resultMap[intermediateWord];
    resultLineNr.clear();
    resultLineNr.push_back(intermediateLineNr.size());
} // WordCounter::Reduce

また、文字列とベクトルデータコンポーネントを含むマップであるresultMapを使用します。

map<string, vector<int> > WordMap;

各単語とそれが出現する行番号を含むintermediateMap変数を使用します。次に、各単語をresultMapに追加しますが、行番号の代わりに、ベクトルの最初の位置に単語数を追加します。

今、intermediateLineNrベクトル全体をコピーしてクリアし、最初の位置に単語数を挿入します。

特定のベクトルの最初の位置に直接挿入する可能性はありますか?

これを行うにはもっと簡単な方法があるはずだと思います。

4

1 に答える 1

1

私はあなたが尋ねたものを受け取らないかもしれませんが、あなたが投稿したコードはそれと同等です:

void WordCounter::Reduce(string intermediateWord, vector<int> intermediateLineNr) 
{
    resultMap[intermediateWord] = vector<int>( 1, intermediateLineNr.size() );
} // WordCounter::Reduce

値を渡すことに注意してください。そのvector<int> intermediateLineNrため、呼び出し中に作成されたベクトルのコピーがあります。vector<int> const& intermediateLineNr;に置き換えます それも同様に機能します。

于 2013-03-10T16:56:23.850 に答える