从给定的映射迭代器反向迭代

时间:2010-02-22 11:53:57

标签: c++ stl map

我想使用map::find(key)在地图中找到一个元素,然后从我找到元素的点开始以相反的顺序迭代地图,直到开头(即直到map::rend())。 / p>

但是,当我尝试将迭代器分配给reverse_iterator时,出现编译错误。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:9)

通过构造函数将迭代器转换为反向迭代器应该可以正常工作,例如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;
}

答案 1 :(得分:2)

明确转换:

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;