如何从外部开始循环嵌套的std :: map?

时间:2013-04-04 00:29:49

标签: c++

我的Google技能让我失望=(

我有以下地图:

std::map<std::string, std::map<std::string, std::string>> spriteSheetMap;

我正在尝试这样做:

for (auto &animationKey : killerRabbit->spriteSheetMap) {
    for (auto &animation : animationKey) {
        //why doesn't this work?
    }            
}

实际错误:

Invalid range expression of type 'std::__1::pair<const std::__1::basic_string<char>, std::__1::map<std::__1::basic_string<char>, std::__1::basic_string<char>, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, std::__1::basic_string<char> > > > >'; no viable 'begin' function available

2 个答案:

答案 0 :(得分:3)

第一个循环调用begin(),返回std::pair的{​​{1}}个value_type。因此迭代这样的一对没有多大意义。我想你想要的是:

std::map

将迭代内部地图。请记住,for (auto &animation : animationKey.second) { 会发生同样的事情:animation将是一对,animation引用密钥,animation.first引用该值。

答案 1 :(得分:2)

错误是说它无法迭代一对。以下修复了问题,因为您在第一个循环中迭代地图时获得了键值对结果。

for (auto &animation : animationKey.second)

请参阅map.begin()以查看第一个循环如何输出对而不是自动变量值的示例。