I want to find an element in the map using map::find(key)
, and then iterate the map in reverse order from the point where I found t开发者_开发知识库he element, till the beginning (i.e. until map::rend()
).
However, I get a compile error when I try to assign my iterator to a reverse_iterator. How do I solve this?
Converting an iterator to a reverse iterator via the constructor should work fine, e.g. std::map<K, V>::reverse_iterator rit(mypos)
.
A minimal example using 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;
}
Make the conversion explicit:
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;
精彩评论