C ++嵌套在同一个地图上的迭代器?

时间:2018-03-25 06:16:49

标签: c++ iterator nested-loops

例如在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 ++地图做正确的事吗?

2 个答案:

答案 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 mapstd::pair<const Key, T>