将返回值从upper_bound分配给reverse_iterator

时间:2016-12-16 14:28:13

标签: c++ c++11 stl stdmap

我通过upper_bound在std::map<int, X>中找到某个点,然后从此点开始向后迭代。我的代码看起来像:

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。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分: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()时必须停止,并且需要递增反向迭代器,而不是递减它。