目前我正在编写一个 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,它是一个带有字符串和 vector 数据组件的映射:
map<string, vector<int> > WordMap;
我使用一个 intermediateMap 变量,它包含每个单词及其出现的行号。现在我想将每个单词添加到 resultMap,但我想在 vector 的第一个位置添加单词数而不是行号。
现在我复制整个 intermediateLineNr vector ,清除它并在第一个位置插入单词数。
有没有可能直接插入特定 vector 的第一个位置?
我认为应该有更简单的方法来做到这一点。
最佳答案
我可能不明白你的要求,但你发布的代码相当于:
void WordCounter::Reduce(string intermediateWord, vector<int> intermediateLineNr)
{
resultMap[intermediateWord] = vector<int>( 1, intermediateLineNr.size() );
} // WordCounter::Reduce
请注意,您正在传递 vector<int> intermediateLineNr
按值,因此将在调用期间创建 vector 的拷贝。将其替换为 vector<int> const& intermediateLineNr
;它
同样有效。
关于c++ - MapReduce - 直接插入 map 中 vector<int> 的第一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324808/