2016-04-14 53 views
-1

我不明白如何僅在Stl地圖的一部分上進行迭代,而不是像在標準遍歷中那樣從開始到結束迭代。這裏是我的代碼:如何在C++中迭代STL Map的子集

auto end = temp_map.rbegin() + THRESHOLD_NUM; 

    for (auto rit = temp_map.rbegin(); rit != end; ++rit) 
    { 
     int s = rit->second; 

     for (int k = 0; k < MAX_ROWS; k++) 
     { 
      array_dist_it[k] = abs(input[k] - input_matrix[k][s]); 
     } 

     float av_real = mean(MAX_ROWS, array_dist_it); 

     float score_real = score_func(av_real); 

     rank_function(score_real, s); 
    } 
} 

我認爲這個問題與for循環的語法有關,特別是與迭代器有關。錯誤是關於無效的操作員。

+0

這不是一個衆包調試平臺。你有沒有通過可能性? _你覺得什麼是錯的?你有什麼試圖解決它?你認爲還有其他什麼方法可行?你嘗試過那些嗎?你研究過哪些研究材料,以及爲什麼你認爲其中推薦的方法不適合你的情況?堆棧溢出不是*思想*的替代;至少,它該死的不應該。 –

+0

「有什麼問題」有什麼不對? –

+0

對不起,如果我已經很好地解釋了自己,顯然我已經嘗試了所有可能性,這個錯誤當然與迭代器有關。我不是爲了證明自己,而是爲了向你尋求解決方案。很明顯,我在詢問之前已經尋找其他可能性。我不完全明白你的觀點。如果對你而言,我的問題微不足道是另一點。 – CIVI89

回答

1

A std::map有一個BidirectionalIterator。它支持遞增和遞減,但不支持加法或減法。如果你需要前進和迭代N次,那麼你可以使用std::next。使用替代

auto end = temp_map.rbegin() + THRESHOLD_NUM; 

你將不得不

auto end = std::next(temp_map.rbegin(), THRESHOLD_NUM); 
+0

點擊你自己的鏈接:'std :: advance'具有'void'返回類型。另外,tsk tsk回答了題外話題(儘管這個可能被MCVE接受(如果不重要))。 –

+0

@LightnessRacesinOrbit我使用了錯誤的函數,我更正了使用'std :: next'的答案。至於其他情況,完全明顯的是'auto end = temp_map.rbegin()+ THRESHOLD_NUM;'是一個錯誤。 – NathanOliver

+1

它是多麼明顯是無關緊要的。我們正試圖在這裏建立質量問答,而不是採用FGITW的猜測來猜測在OP甚至沒有寫出錯誤信息的離題問題中出現的代碼中的明顯缺陷。這個問題是無法搜索到的,所以它不會被視爲堆棧溢出的「有用的」......因此,不應該通過猜測來回答這個問題。 /感謝您解決您提出的解決方案。 –