1

我的谷歌技能让我失望了=(

我有以下地图:

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
4

2 回答 2

3

第一个循环调用begin()返回's (std::pair即's)。所以迭代这样的一对没有多大意义。我想你想要的是:value_typestd::map

for (auto &animation : animationKey.second) {

这将遍历内部地图。请记住,同样的事情会发生在animation:animation将是一对,animation.first引用键和animation.second引用值。

于 2013-04-04T00:38:56.467 回答
2

错误是说它不能迭代一对。当您在第一个循环中通过迭代地图获得键值对结果时,以下解决了该问题。

for (auto &animation : animationKey.second)

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

于 2013-04-04T00:39:33.877 回答