В вашем коде есть множество проблем. Самый тривиальный: вы пропустили точку с запятой после объявления вашей карты; Кроме того, у вас есть дополнительная скобка в конце.
Наконец, ключи карты являются const
значения, и при вызове begin()
на const
контейнере, что вы получите это 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;
}
}
}
}
Я нашел этот вопрос, не constructve – duDE
я не чувствую склонен смотреть на это слишком ди (интересно, почему). Просто измените 'iterator' на' const_iterator', посмотрим, поможет ли это. – john
Какая ошибка? – OGH