Обратная итерация от данного итератора карты - PullRequest
3 голосов
/ 22 февраля 2010

Я хочу найти элемент на карте, используя map::find(key), а затем выполнить итерацию карты в обратном порядке от точки, где я нашел элемент, до начала (т.е. до map::rend()).

Тем не менее, я получаю ошибку компиляции, когда пытаюсь назначить свой итератор reverse_iterator.Как мне это решить?

Ответы [ 2 ]

9 голосов
/ 22 февраля 2010

Преобразование итератора в обратный итератор через конструктор должно работать нормально, например, std::map<K, V>::reverse_iterator rit(mypos).

Минимальный пример использования std :: vector:

#include <vector>
#include <iostream>
#include <algorithm>

int main() {
  typedef std::vector<int> intVec;
  intVec vec;
  for(int i = 0; i < 20; ++i) vec.push_back(i);

  for(intVec::reverse_iterator it(std::find(vec.begin(), vec.end(), 10));
      it != vec.rend(); it++)
    std::cout << *it;
}
2 голосов
/ 22 февраля 2010

Сделайте преобразование явным:

std::map<int, int> SomeMap;

for ( int i = 0; i < 10; i++)
    SomeMap[ i ] = i;

std::map<int, int>::iterator it = SomeMap.find( 5 );
std::map<int, int>::reverse_iterator itr( it );

for ( itr; itr != SomeMap.rend( ); itr++ )
    std::cout << itr->first << std::endl;
...