2013-03-10 3 views
0

현재 WordCounter (MapReduce)를 작성 중입니다. 내가 intermediateMap 변수를 사용MapReduce - 벡터의 첫 번째 위치에 직접 삽입 <int>

map<string, vector<int> > WordMap; 

: 나는 또한 문자열과 vectory 데이터 구성 요소가있는지도 인 된 resultMap을 사용

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에 추가하고 싶지만 줄 번호 대신 벡터의 첫 번째 위치에 단어 수를 추가하고 싶습니다.

지금 전체 intermediateLineNr 벡터를 복사하고 지우고 첫 번째 위치에 단어 수를 삽입하십시오.

특정 벡터의 첫 번째 위치에 직접 삽입 할 가능성이 있습니까?

이렇게 쉬운 방법이 있어야한다고 생각합니다.

답변

1

나는 아마도 당신이 무엇을 물어하지 않지만 당신이 게시 코드는 그 해당 작업을 수행합니다 당신이 값으로 vector<int> intermediateLineNr을 전달하는

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

주, 그래서 통화 중에 벡터의 사본이있을 것이다. 그것을 vector<int> const& intermediateLineNr으로 바꿉니다; 그것도 작동합니다.

+0

Thansk, 저에게 잘 작동합니다. 하지만 한 가지 질문이 있습니다. [] 연산자가지도에없는 단어를 자동으로 추가합니까? – MeJ

+0

예, 동작을 지정하는 방법입니다. –

+0

예,지도에 누락 요소를 자동으로 추가하는 연산자 []이 있습니다. 많은 사람들이 그 때문에지도가 혼란 스럽다고 말합니다. –