分配从upper_bound到reverse_iterator的返回值

Assign return value from upper_bound to reverse_iterator

本文关键字:iterator 返回值 reverse bound upper 分配      更新时间:2023-10-16

我通过upper_bound在 std::map<int, X>中找到了一个特定点,然后从此点上i迭代。我的代码看起来像:

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。

最好的解决方法是什么?

您需要将迭代器转换为反向迭代器:

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()时停止,并且您需要递增反向迭代器,而不是减少它。