Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何无休止地在地图上循环_C++ - Fatal编程技术网

C++ 如何无休止地在地图上循环

C++ 如何无休止地在地图上循环,c++,C++,我需要在不停止循环的情况下迭代整个地图。 我的例子是可行的,但它使用了两个循环,这个问题可以解决吗 我认为使用一个for循环就可以做到这一点 #include <map> map<int, int>map2; map2[1] = 11; map2[2] = 12; map2[3] = 13; for (;;) { for (auto& a : map2) { 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';
        }
    }
#包括
MAP2;
map2[1]=11;
map2[2]=12;
map2[3]=13;
对于(;;)
{
用于(自动&a:map2)
{

不能使用
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';
}
这是三元运算符。您首先询问迭代器是否等于映射中的最后一个元素。我们添加
std::prev()
,以获得最后一个元素,因为
map::end()
为我们提供了一个值

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

it = map2.begin()
否则迭代器将递增,您将获得下一个元素

it++

另请参见:

为什么需要两个循环?为什么在映射迭代之前使用无限for循环?代码中没有数组。我正在映射中循环,我的程序需要它。我认为您的代码已经是最好的方法。2个循环。如果您的列表是普通数组(不是映射,而是可以通过int索引的列表)你只需要像这样用换行符来增加索引:
index=(index+1)%yourList.size();
数组就是我所说的映射;我的转换不好。这个循环可以捕获像我这样的映射更改?是的,它会在映射中插入新值时检测。迭代器方法与(auto&a:map2)的
差不多
添加了迭代器reset,以便进一步了解迭代器和基于范围的方法之间的区别:是否可以稍微缩短周期?他看起来很长,可读性差。这就是为什么最初使用两个循环的解决方案更简洁易读。通常,您可以使用可读的方法,也可以“在一个循环中”。
it = map2.begin()
it++