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

发布于 2024-08-22 15:11:39 字数 158 浏览 3 评论 0原文

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

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

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 the 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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

Saygoodbye 2024-08-29 15:11:39

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

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;
}
乞讨 2024-08-29 15:11:39

明确转换:

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;

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文