您的代码中有很多问题。最微不足道的:在声明地图后您缺少分号;此外,最后还有一个额外的支架。
最后,map 的键是const
值,当调用begin()
容器时const
,你得到的是 a const_iterator
,而不是iterator
。以下是您应该如何修复程序:
#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
}
另请注意,在 C++11 中,您可以使用 来简化事情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
循环使这更加简单:
int main()
{
map< map< set< int >, int >, int> mymap[2];
for (auto const& m : mymap[0])
{
for (auto const& s : m.first)
{
for (auto const& e : s.first)
{
std::cout << e << " " << m.second << endl;
}
}
}
}