2016-12-16 103 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