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 但我想在向量的第一个位置添加单词的数量而不是行号。

现在我复制整个 middleLineNr 向量,清除它并在第一个位置插入单词数。

是否有可能直接插入特定向量的第一个位置?

我认为应该有一个更简单的方法来做到这一点。

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 回答