我想使用map::find(key)
在地图中找到一个元素,然后从我找到元素的点开始以相反的顺序迭代地图,直到开头(即直到map::rend()
)。 / p>
但是,当我尝试将迭代器分配给reverse_iterator时,出现编译错误。我该如何解决这个问题?
答案 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;