Syntax:
#include <map> multimap(); multimap( const multimap& m ); multimap( input_iterator start, input_iterator end ); multimap( input_iterator start, input_iterator end, const key_compare& cmp ); explicit multimap( const key_compare& cmp ); ~multimap();
マルチマップは、いくつかのコンストラクタを持ちます。
デフォルトのコンストラクタは引数をとりませんが、マルチマップの新しいインスタンスを作成し、一定の時間で実行されます。
デフォルトのコピーコンストラクタは線形時間で実行され、与えられたマルチマップの”c”のコピーである新しいマルチマップを作成し使用することができます。
マルチマップは、定義された開始と終了の要素から作成することができます。 このコンストラクタは、オプションとして、比較関数”cmp”とアロケータ”alloc”を使用しても提供することができます。
デフォルトのデストラクタは、マルチマップが破棄されるべきときに呼ばれます。
マルチマップがテンプレート定義を必要とするときは、両方のキーの型と値の型を定義するときです。 たとえば、マルチマップのインスタンスを作る(文字列と数値のマップ)場合では、次のステートメントを使用します。
multimap<string,int> m;
また、テンプレート内で比較関数とアロケータを供給することができます。
multimap<string,int,myComp,myAlloc> m;
たとえば、次のコードでは、数値IDを持つ従業員の名前を関連付けるためにマルチマップを使用しています。
multimap<string,int> m; int employeeID = 0; m.insert( pair<string,int>("Bob Smith",employeeID++) ); m.insert( pair<string,int>("Bob Thompson",employeeID++) ); m.insert( pair<string,int>("Bob Smithey",employeeID++) ); m.insert( pair<string,int>("Bob Smith",employeeID++) ); cout << "Number of employees named 'Bob Smith': " << m.count("Bob Smith") << endl; cout << "Number of employees named 'Bob Thompson': " << m.count("Bob Thompson") << endl; cout << "Number of employees named 'Bob Smithey': " << m.count("Bob Smithey") << endl; cout << "Employee list: " << endl; for( multimap<string, int>::iterator iter = m.begin(); iter != m.end(); ++iter ) { cout << " Name: " << iter->first << ", ID #" << iter->second << endl; }
実行時には、上記のコードは、次の結果が出力されます。 従業員リストは、出力時にアルファベット順に並べ替えられます、それはマルチマップがキーで並べ替えて格納しているからです。
Number of employees named 'Bob Smith': 2 Number of employees named 'Bob Thompson': 1 Number of employees named 'Bob Smithey': 1 Employee list: Name: Bob Smith, ID #0 Name: Bob Smith, ID #3 Name: Bob Smithey, ID #2 Name: Bob Thompson, ID #1