我需要遍历整个地图而不停止循环。 我的示例有效,但是它使用了两个循环,可以解决这个问题吗?
我认为仅使用一个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';
}
}
答案 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