2016-12-16 101 views
0

我通過upper_bound找到std::map<int, X>中的某個點,然後從這個點開始向後迭代。我的代碼看起來像這樣:從upper_bound指定返回值到reverse_iterator

MAP::reverse_iterator iter; 

iter = _map.upper_bound(value); // Does not compile because upper_bound is not reverse_iterator 

while(iter != rbegin()){ 
    // logic 
    --iter; 
} 

我得到一個編譯錯誤,因爲upper_bound()沒有返回一個reverse_iterator。

補救此問題的最佳方法是什麼?

+2

將迭代器轉換爲反向迭代器? – NathanOliver

+0

@NathanOliver謝謝沒有意識到這是可能的。如果你把它作爲答案,我會接受。 – user997112

回答

0

你需要你的迭代器轉換爲一個反向迭代:

auto iter = _map.upper_bound(value); 
for (std::reverse_iterator<decltype(iter)> rit{iter}; rit != _map.rend(); ++rit) { 
    // Do whatever you want... 
} 

請注意,你必須達到_map.rend(),不_map.rbegin()的時候停止,你需要增加反向迭代器,不會遞減它。

+0

這是C++ 14還是C++ 11?我在GCC4.8.2上收到編譯器錯誤,說它不能轉換std :: reverse_iterator rit {map.upper_bound(10)}; – user997112

+0

@ user997112這應該在C++ 11中工作。 – Holt