В настоящее время я пишу WordCounter (MapReduce).
Моя реализация функции сокращения выглядит так:
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;
Я использую переменную MiddleMap, которая содержит каждое слово и номера строк, где оно встречается. Теперь я хочу добавить каждое слово в resultMap, но вместо номеров строк я бы хотел добавить количество слов в первой позиции вектора.
Прямо сейчас я копирую весь вектор middleLineNr, очищаю его и вставляю в первую позицию количество слов.
Есть ли возможность вставить непосредственно в первую позицию конкретного вектора?
Я думаю, что должен быть более простой способ сделать это.
Возможно, я не понимаю, что вы спрашиваете, но код, который вы разместили, эквивалентен этому:
void WordCounter::Reduce(string intermediateWord, vector<int> intermediateLineNr)
{
resultMap[intermediateWord] = vector<int>( 1, intermediateLineNr.size() );
} // WordCounter::Reduce
Обратите внимание, что вы проходите vector<int> intermediateLineNr
по значению, поэтому будет копия вектора, сделанная во время вызова. Замени это vector<int> const& intermediateLineNr
; Это
работает так же.
Других решений пока нет …