c++mapインデックスが存在しないkeyによる結果分析


今日はこれを長く調整してやっとこの問題を発見しました。だから以下のように記録します。
テストコード

#include<bits/stdc++.h>
using namespace std;

int main()
{
	map<int,int>mp_int;
	map<string,string>mp_string;
	map<char,char>mp_char;
	mp_int[1]=10;
	string a="abc",b="xzy",c="def";
	mp_string[a]=b;
	mp_char['a']='b';
	cout<<"    "<<endl; 
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	cout<<"       "<<endl;
	cout<<mp_int[2]<<endl<<mp_string[c]<<endl<<mp_char['c']<<endl;
	
	cout<<"  "<<endl;
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	return 0;
}
アウトPUT
通常の索引
1 10
abc xzy
a b
存在しないキーにアクセス
0
変化
1 10
2 0
abc xzy
def
a b
c
存在しないkeyはインデックスされた後にmapに追加され、デフォルト値(一般的には整数は0、文字列は空)が付与されていることが分かります。
注意したいのは、インデックスが発生すると、上記のようなエラーが発生します。たとえif文でも

#include<bits/stdc++.h>
using namespace std;

int main()
{
	map<int,int>mp_int;
	map<string,string>mp_string;
	map<char,char>mp_char;
	mp_int[1]=10;
	string a="abc",b="xzy",c="def";
	mp_string[a]=b;
	mp_char['a']='b';
	cout<<"    "<<endl; 
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	cout<<"       "<<endl;
	if(mp_int[2]);
	if(mp_string[c]==a);
	if(mp_char['c']);
	
	cout<<"  "<<endl;
	for(auto &i:mp_int)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_string)cout<<i.first<<" "<<i.second<<endl;
	for(auto &i:mp_char)cout<<i.first<<" "<<i.second<<endl;
	
	return 0;
}
上のコードは同じ結果を生みます。
これらのキーをもう一回使いたいと間違えます。実際には存在しないキーを使います。
避ける方法は、インデックスの前にfindまたはcountを使ってキーがあるかどうかを判断することです。
ここでは、c+mapインデックスが存在しないkeyの結果を分析する記事を紹介します。c+mapインデックスの内容については、以前の記事を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。