我的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
答案 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()以查看第一个循环如何输出对而不是自动变量值的示例。