2013-03-10 30 views
0

當前我在寫一個WordCounter(MapReduce)。MapReduce - 在地圖中直接插入矢量的第一個位置<int>

我的精簡函數的實現看起來像:

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這是一個字符串和vectory數據組件的地圖:

map<string, vector<int> > WordMap; 

我使用intermediateMap變量其中包含每個單詞和它出現的行號。現在我想將每個單詞添加到resultMap中,而不是行號,我想在矢量的第一個位置添加單詞的數量。

現在我複製整個intermediateLineNr向量,清除它並在第一個位置插入單詞數。

有沒有可能直接插入特定向量的第一個位置?

我認爲應該有一個更簡單的方法來做到這一點。

回答

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;它 也適用。

+0

Thansk,對我來說工作得很好。但是我有一個問題,如果地圖中不存在[]操作符會自動添加單詞嗎? – MeJ 2013-03-10 17:00:57

+0

是的,這是如何指定行爲的 – 2013-03-10 17:04:11

+0

是的,map有這樣的operator [],它自動添加缺少的元素。很多人說因爲這個原因地圖很混亂。 – 2013-03-10 17:04:43

相關問題