例如在Array中: 我能做到
for (int i =0; i < array.size(); i++) {
for (int j =i; j < array.size(); j++) {
do something
}
}
如何为C ++ map执行此类嵌套样式:
for (auto it = map.begin(); it != map.end(); ++it) {
for (auto lt = it; lt != map.end(); ++lt) {
dosomething.
}
}
我正在为c ++地图做正确的事吗?
答案 0 :(得分:0)
如何为C ++ map执行此类嵌套样式?
虽然我没有看到任何特别的理由在相同的地图上嵌套迭代,这很奇怪,如@StoryTeller所提到的,您提供的解决方案确实有效:
for (auto it = map.begin(); it != map.end(); ++it)
{
for (auto lt = it; lt != map.end(); ++lt)
{
std::cout << lt->first << " : " << lt->second << std::endl;
}
}
答案 1 :(得分:-1)
你在语法中是正确的,但可以进行一些优化。例如:
auto&&the_end=map.end();
for (auto it = map.begin(); it !=the_end; ++it) {
for (auto lt = it; lt !=the_end; ++lt) {
dosomething.
}
}
这可能会减少end()
的函数调用,这可能不会被编译器自动优化。
值得注意的是,迭代器实际指向value_type
map
,std::pair<const Key, T>