C++(17):mapの初期化
1733 ワード
C++における関連コンテナmapの初期化/付与についてはいくつかの方法がある
1.ちょくせつわりあてほう
2.insertで追加
3.リスト初期化
注意:リストの初期化はc++11以降のバージョンに適用され、11未満のバージョンでは使用できません.
キーを挿入してvalueを指定しない必要がある場合は、式ではないように直接次のように書くことができますが、mapは「[]」をリロードし、本質的には式であり、変数が存在する場合は対応するvalueを直接返し、存在しない場合はキー値を増やして0に自動的に初期化することを意味します.
ただし、valueタイプが数型の場合、上記のように付与操作が行われていなくても、デフォルトでは0が付与されます.
valueがstringまたはcharタイプの場合、デフォルトは空であり、デフォルト値はありません.そのため、stringまたはcharは、valueに値を割り当てない追加keyをリスト初期化することができます.
マルチタイプネストmap付与
mapの定義は、次のような複数の異なるタイプのネストをサポートします.
このような多層ネスト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);