2016-12-16 4 views
0

Я нахожу определенную точку в std::map<int, X> через upper_bound, а затем с этой точки на I итерации назад. Мой код выглядит примерно так:Назначить возвращаемое значение от верхнего_общего до 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() не возвращает обратный_тератор.

Каков наилучший способ исправить это?

+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

Смежные вопросы