我宣布像这样的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;
}
}
}
}
我得到一些奇怪的错误可以任何身体帮助我
答案 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