MapReduce — вставить непосредственно в первую позицию вектора & lt; int & gt; на карте

В настоящее время я пишу 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, очищаю его и вставляю в первую позицию количество слов.

Есть ли возможность вставить непосредственно в первую позицию конкретного вектора?

Я думаю, что должен быть более простой способ сделать это.

0

Решение

Возможно, я не понимаю, что вы спрашиваете, но код, который вы разместили, эквивалентен этому:

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

Обратите внимание, что вы проходите vector<int> intermediateLineNr по значению, поэтому будет копия вектора, сделанная во время вызова. Замени это vector<int> const& intermediateLineNr; Это
работает так же.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]