如何打印此类型地图的地图值<映射<设置< int> ,int>,int> mymap中[2]

时间:2013-04-06 12:43:40

标签: c++ map stl iterator set

我宣布像这样的stl地图

          map< map< set< int > ,int >, int> mymap[2]

我声明了像这样的迭代器

         set < int > ::iterator it3;
         map< map< set< int > ,int >, int> :: iterator it1;
         map< set< int > ,int > :: iterator it2;

我写了一些像这样的内容

       for(it1=mymap[0].begin();it1!=mymap[0].end();it1++)
    {
            for(it2=(it1->first).begin();it2!=(it1->first).end();it2++)
            {
                  for(it3=(it2->first).begin();it3!=(it2->first).end();it3++)
                  {
                    cout<<*it3<<" "<<it1->second<<endl;
                  }
            }           
    }
}

我得到一些奇怪的错误可以任何身体帮助我

1 个答案:

答案 0 :(得分:1)

您的代码中存在许多问题。最琐碎的事:你在宣布地图后错过了一个分号;另外,你最后还有一个额外的支撑。

最后,地图的键是const值,在begin()容器上调用const时,得到的是const_iterator,而不是{{} 1}}。以下是修复程序的方法:

iterator

另请注意,在C ++ 11中,您可以使用#include <map> #include <set> #include <iostream> using std::map; using std::set; using std::cout; using std::endl; int main() { map< map< set< int > ,int >, int> mymap[2]; // ^ MISSING SEMICOLON HERE map< map< set< int > ,int >, int> :: iterator it1; map< set< int > ,int > ::const_iterator it2; // ^^^^^^^^^^^^^^ <== MAP KEYS ARE CONST VALUES! set < int > ::const_iterator it3; // ^^^^^^^^^^^^^^ <== MAP KEYS ARE CONST VALUES! for(it1=mymap[0].begin();it1!=mymap[0].end();it1++) { for(it2=(it1->first).begin();it2!=(it1->first).end();it2++) { for(it3=(it2->first).begin();it3!=(it2->first).end();it3++) { std::cout<<*it3<<" "<<it1->second<<endl; } } } // } <== EXTRA BRACE HERE } 来简化操作,这样可以避免这种麻烦:

auto

基于范围的int main() { map< map< set< int > ,int >, int> mymap[2]; for (auto it1 = mymap[0].begin(); it1 != mymap[0].end(); it1++) // ^^^^ { for (auto it2 = (it1->first).begin(); it2 != (it1->first).end(); it2++) // ^^^^ { for (auto it3=(it2->first).begin(); it3!=(it2->first).end(); it3++) // ^^^^ { std::cout<<*it3<<" "<<it1->second<<endl; } } } } 循环使这更简单:

for