C++(17):mapの初期化

1733 ワード

C++における関連コンテナmapの初期化/付与についてはいくつかの方法がある
  1.ちょくせつわりあてほう
    map m1;
    m1["def"] = 2;

 2.insertで追加
    map m2;
    m2.insert({ "abc", 1 });    //        
    //       
    m2.insert(make_pair(string("def"), 2));
    m2.insert(pair(string("ghi"), 3));

3.リスト初期化
    map m3 = {
    {"string",1}, {"sec",2}, {"trd",3}
    };

    map m4 = {
    {"first","second"}, {"third","fourth"},
    {"fifth","sixth"}, {"begin","end"}
    };

注意:リストの初期化はc++11以降のバージョンに適用され、11未満のバージョンでは使用できません.
 
キーを挿入してvalueを指定しない必要がある場合は、式ではないように直接次のように書くことができますが、mapは「[]」をリロードし、本質的には式であり、変数が存在する場合は対応するvalueを直接返し、存在しない場合はキー値を増やして0に自動的に初期化することを意味します.
map a;    //a string int  map
a["new"];        //"new"    key

ただし、valueタイプが数型の場合、上記のように付与操作が行われていなくても、デフォルトでは0が付与されます.
valueがstringまたはcharタイプの場合、デフォルトは空であり、デフォルト値はありません.そのため、stringまたはcharは、valueに値を割り当てない追加keyをリスト初期化することができます.
string m5 = {
    {"first",""}, {"second",""}
    {"third",""}, {"fourth",""}
};

 
マルチタイプネストmap付与
mapの定義は、次のような複数の異なるタイプのネストをサポートします.
map>>  testmap;

このような多層ネストmapは、次のような値付け操作を直接行うこともできます.
map>>  testmap;
testmap[3]["three"].push_back(3.75);