如何无限循环地浏览地图

时间:2019-09-24 05:37:42

标签: c++

我需要遍历整个地图而不停止循环。 我的示例有效,但是它使用了两个循环,可以解决这个问题吗?

我认为仅使用一个for循环就可以做到这一点

#include <map>

map<int, int>map2;

    map2[1] = 11;
    map2[2] = 12;
    map2[3] = 13;

    for (;;)
    {
        for (auto& a : map2)
        {

            cout << a.first << " : " << a.second << '\n';
        }
    }

1 个答案:

答案 0 :(得分:1)

使用std::map::iterator。这样,您可以只检查迭代器是否在末尾,如果是,则将其重置为开始。

map<int, int>::iterator it;
for ( it = map2.begin(); it != map2.end(); it == std::prev( map2.end() ) ? it = map2.begin() : it++ )
{
    cout << it->first << " : " << it->second << '\n';
}

说明

it == std::prev( map2.end() ) ? it = map2.begin() : it++

那是三元运算符。您首先要问迭代器是否等于映射中的最后一个元素。我们添加std::prev()以获得最后一个元素,因为map::end()为我们提供了一个past-the-end值。

it == std::prev(map2.end())

如果它是最后一个元素,则将迭代器设置为地图的开头。

it = map2.begin()

否则迭代器将增加,您将获得下一个元素

it++

另请参阅:Loop through map