C++multimapマルチマッピングコンテナ学習ノート


Multimapはmapと基本的に同じで、唯一異なるのは、multimapが重複キー値を挿入する要素を許可し、重複キー値の存在を許可するため、multimapの要素の挿入、削除、検索はmapとは異なる.
Multimapを使用するには、ヘッダファイルincludeを追加する必要があります.
Multimapオブジェクト作成、要素挿入
要素を繰り返し挿入できます.要素を挿入するにはinsert()メソッドを使用する必要があります.次の例では、「Jack」というキー値を繰り返し挿入します.実行結果は、Jack 300.5 Jack 306 Kity 200 Memi 500 The Code Followsです.
#include <iostream>
#include <map>
using namespace std;

int main()
{
    //  map  ,        ;
    multimap <string, double> mp;
    //    ;
    mp.insert(pair<string, double>("Jack", 300.5));
    mp.insert(pair<string, double>("Kity", 200));
    mp.insert(pair<string, double>("Memi", 500));
    //      "Jack";
    mp.insert(pair<string, double>("Jack", 306));
    //           multimap;
    multimap <string, double>:: iterator it;
    for(it=mp.begin(); it != mp.end(); it++) {
        cout << (*it).first << " " << (*it).second << endl;
    }
    return 0;
}

Multimap要素の削除
削除操作はerase()メソッドを採用し、ある反復器の位置の要素を削除することができ、あるキー値のすべての重複要素に等しく、1つの反復器区間の要素であり、clear()メソッドを使用してmultimapコンテナ内の要素を空にすることができる.重複するキー値があるため、削除操作で削除するキー値がmultimapから一度に削除されます.次のプログラムを参照してください:実行結果は:The elements before deleted:  Jack 300.5 Jack 306 Kity 200 Memi 500 The elements after deleted :  Kity 200 Memi 500 The Code Follows:
#include <iostream>
#include <map>
using namespace std;

int main()
{
    //  map  ,        ;
    multimap <string, double> mp;
    //    ;
    mp.insert(pair<string, double>("Jack", 300.5));
    mp.insert(pair<string, double>("Kity", 200));
    mp.insert(pair<string, double>("Memi", 500));
    //      "Jack";
    mp.insert(pair<string, double>("Jack", 306));
    //           multimap;
    multimap <string, double>:: iterator it;
    cout << "The elements before deleted : " << endl;
    for(it=mp.begin(); it != mp.end(); it++) {
        cout << (*it).first << " " << (*it).second << endl;
    }
    //      “Jack”   ;
    mp.erase("Jack");
    cout << "The elements after deleted : " << endl;
    for(it=mp.begin(); it != mp.end(); it++) {
        cout << (*it).first << " " << (*it).second << endl;
    }
    return 0;
}

Multimap要素の検索
Multimapに重複するキー値があるため、find()メソッドは重複キー値の最初の要素の反復器位置のみを返します.このキー値が見つからない場合はend()反復器の位置を返します.次のプログラムを参照してください.実行結果は、All of the elementsです.  Jack 300.5 Jack 306 Kity 200 Memi 500 The searching result : Jack 300.5 Not find it! The Code Follows:
#include <iostream>
#include <map>
using namespace std;

int main()
{
    //  map  ,        ;
    multimap <string, double> mp;
    //    ;
    mp.insert(pair<string, double>("Jack", 300.5));
    mp.insert(pair<string, double>("Kity", 200));
    mp.insert(pair<string, double>("Memi", 500));
    //      "Jack";
    mp.insert(pair<string, double>("Jack", 306));
    //           multimap;
    multimap <string, double>:: iterator it;
    cout << "All of the elements : " << endl;
    for(it=mp.begin(); it != mp.end(); it++) {
        cout << (*it).first << " " << (*it).second << endl;
    }
    //    ;
    cout << endl << "The searching result :" << endl;
    it = mp.find("Jack");
    if(it != mp.end()) {   //  ;
        cout << (*it).first << " " << (*it).second << endl;
    }else {    //   ;
        cout << "Not find it!" << endl;
    }
    it = mp.find("Nacy");
    if(it != mp.end()) {  //  ;
        cout << (*it).first << " " << (*it).second << endl;
    }else {   //   ;
        cout << "Not find it!" << endl;
    }
    return 0;
}