-2

我声明了一个这样的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;
                  }
            }           
    }
}

我遇到了一些奇怪的错误,任何人都可以帮助我吗

4

2 回答 2

1

您的代码中有很多问题。最微不足道的:在声明地图后您缺少分号;此外,最后还有一个额外的支架。

最后,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;
            }
        }
    }
}
于 2013-04-06T13:03:29.853 回答
-2

<int name="ModChaSendBKColor" value="-4003595"/>

于 2021-12-23T11:44:23.867 回答