【C++ STL】map::operator[](添字演算子)の使い方とサンプルコード徹底解説
この記事では、C++ STLのmap(マップ)コンテナで使われる添字演算子「[]」、すなわちmap::operator[]について、その仕組み・構文・具体的な使用例をわかりやすく解説します。
C++ STLにおけるmapとは?
mapは連想コンテナの一種で、「キー値」とそれに対応する「マップ値」の組み合わせからなる要素を、特定の順序で格納できるコンテナです。mapコンテナ内部のデータは、常に関連付けられたキーに基づいて自動的にソートされます。また、各要素には一意なキーが割り当てられており、このキーを通じて値へアクセスします。
map::operator[]([]演算子)とは?
map::operator[]は要素への参照を取得するための演算子で、キーを指定してコンテナ内の要素にアクセスする際に使用します。
指定したキーがコンテナ内に存在しない場合は、そのキーを持つ新しい要素が自動的に挿入され、マップ値への参照が返されます。この動作はmap::at()とほぼ同じですが、両者には決定的な違いがあります。at()はキーがmapコンテナ内に存在しない場合に例外(std::out_of_range)を送出するのに対し、operator[]は新規要素を挿入するという点です。
構文
map_name[key];
パラメータ
この演算子が受け取るパラメータは1つだけです。コンテナ内で参照したいキーkを指定します。
戻り値
キーkに関連付けられたマップ値への参照を返します。
基本的な使用例
入力 −
map<int, int> newmap;
newmap.insert({1, 20});
newmap.insert({2, 30});
newmap[1];出力
20
サンプルコード1:キーを指定して要素にアクセスする
#include <bits/stdc++.h>
using namespace std;
int main(){
map<int, int> TP_1;
TP_1[1] = 10;
TP_1[2] = 20;
TP_1[3] = 30;
TP_1[4] = 40;
cout << "TP[3]の要素 : " << TP_1[3];
return 0;
}上記のコードを実行すると、以下の出力が得られます。
TP[3]の要素 : 30
サンプルコード2:存在しないキーにアクセスした場合
#include <bits/stdc++.h>
using namespace std;
int main(){
map<int, int> TP_1;
TP_1[1] = 10;
TP_1[2] = 20;
TP_1[3] = 30;
TP_1[4] = 40;
cout << "TP[3]の要素 : " << TP_1[3];
if(TP_1[5] == 0){
cout << "\nTP[5]の要素は存在しません";
}
else{
cout << "TP[5]の要素 : " << TP_1[5];
}
return 0;
}上記のコードを実行すると、以下の出力が得られます。
TP[3]の要素 : 30 TP[5]の要素は存在しません
ポイント解説
サンプルコード2では、存在しないキー5にアクセスした時点で、map内に「キー5・値0」(int型のデフォルト初期化値)を持つ新しい要素が自動的に挿入されるため、条件式TP_1[5] == 0が真になります。つまり、operator[]によるアクセスは単なる参照ではなく、mapのサイズを変化させる可能性がある点に注意が必要です。キーの存在確認だけを行いたい場合は、find()やcount()を使用する方が安全です。
-
C++ STLのセット(set)とマップ(map)とは?違いと基本的な使い方を解説
セット(std::set)とは セット(Set)は抽象データ型の一種で、要素の値そのものが識別子として機能するため、すべての要素が一意である必要があります。一度セットに追加した要素の値を直接変更することはできませんが、該当する要素を削除してから、変更後の値を新たに挿入し直すことは可能です。 マップ(std::map)とは マップ(Map)は、要素を「キー」と「値」のペアとして格納する連想コンテナです。各要素はキー値(key)とマップ値(mapped value)を持ち、同一のキー値を持つ要素が複数存在することはありません。 以上の説明から、両者の違いは次のように整理できます。 セット:
-
STLのマップ(map)を実装するC++プログラムの書き方
マップ(map)とはマップは、要素をキーと値のペアとして対応付けて格納する連想コンテナです。各要素はキー値とマップ値を持ち、同じキー値を持つ要素が複数存在することはありません。使用する主なメンバ関数m::find() – マップ内に指定したキー値(b)を持つ要素が見つかれば、その要素へのイテレータを返します。見つからない場合はend()へのイテレータを返します。m::erase() – マップから指定したキー値の要素を削除します。m::equal_range() – ペア(pair)のイテレータを返します。このペアは、指定したキーと等価なキーを持つコンテナ内のすべての要素を含む範囲の境界を表し