1

次のコードを使用して、マップ内でマップを使用しようとしています。

 map<map <int,int>,int > multimap;

multimap[1]ここで、 --->(2,3)、multimap[4]--->(5,6)のようなデータを挿入します。私はそれを次のように挿入しようとしていますが、私が理解できないように見える構文エラーがあると思います!

 multimap.insert(pair<int,pair<int,int>(2,3)>(1));

どんな助けでもありがたいです。追加した後、イテレータを使用して値を表示するにはどうすればよいですか?

4

4 に答える 4

3

マップテンプレートは2つのパラメータを必要としますmap<key, value>。キーには、他のキーと比較するための何らかの方法が必要です。で演算子をmap使用しているので、キーを押すと問題が発生します。これは、任意のマップが定義されていないためです。<map<int,int><

試す

map<int, map<int, int> > multimap; 
于 2012-04-19T16:19:05.953 に答える
2

multipmapが必要な場合は、multimapを使用する必要があります:)ここに宣言と挿入ステートメントがあります。

typedef pair<int, int> valPair;
multimap<int, valPair> mmap;

mmap.insert(make_pair(1, make_pair(2, 3)));
mmap.insert(make_pair(1, make_pair(4, 5)));

for(multimap<int, valPair>::iterator it = mmap.begin();
    it != mmap.end(); ++it)
{
    cout << "Key: " << it->first << " Vals:(";
         << it->second.first << ", " << it->second.second << ")" << endl;
}
于 2012-04-19T16:36:10.393 に答える
0

-まず、コードにマルチマップはありません-単に「マルチマップ」と呼ばれるマップがあります。

-第二に、構造

map< map<int, int>, int > multimap;

マップをキーとして使用し、intを値として使用しているため、1-> 2、3はマップされません。

-第3に、ビルドエラーが発生する理由は、ケースのinsert()メソッドが

pair< map<int, int>, int >

あなたがおそらく欲しいのはこれです:

map< int, pair<int, int> > multimap;
pair<int, int> myPair( 2, 3 );
multimap.insert( pair< int, pair<int, int> >( 1, myPair ) );

map< int, pair<int, int> >::iterator iter = multimap.begin();
while( iter != multimap.end() )
{
    int key = iter->first;
    pair<int, int> aPair = iter->second;
    ++iter;
}
于 2012-04-19T16:33:06.060 に答える
0

マップとマルチマップ、およびキーと値を混同しているように見えます。

キー「1」を値「(2,3)」および「(4,5)」にマップするマップが必要な場合は、次のようにします。

multimap<int,pair<int,int>> myMap { {1,{2,3}}, {1,{4,5}} };

またはC++03の場合:

multimap<int,pair<int,int> > myMap;
myMap.insert(make_pair(1,make_pair(2,3)));
myMap.insert(make_pair(1,make_pair(4,5)));

マップ上で反復する場合、各アイテムはペアを参照します。ペアの最初のアイテムがキーで、2番目のアイテムが値です。

for(auto &i : myMap) {
    std::cout << "Key: " << i->first
      << " Value: (" << i->second.first << ',' << i->second.second << ")\n";
}

またはC++03で

for(multimap<int,pair<int,int> >::const_iterator i(myMap.begin()),end(myMap.end()); i!=end; ++i) {
    std::cout << "Key: " << i->first << " Value: (" << i->second.first << ',' << i->second.second << ")\n";
}

これは印刷されます:

Key: 1 Value: (2,3)
Key: 1 Value: (4,5)
于 2012-04-19T16:30:44.040 に答える