C++ STLにおけるmapの代入演算子「=」の使い方を解説
本記事では、C++ STLにおけるmapコンテナの代入演算子「=」(operator=)について、その動作・構文・具体的な使用例を詳しく解説します。
C++ STLにおけるmapとは?
mapはC++ STLに用意されている連想コンテナの一つで、キー値と対応するマップされた値(要素)の組み合わせからなるデータを、特定の順序で格納することができます。mapコンテナ内部では、データは常にキーに基づいて自動的にソートされて管理されます。また、格納された各要素には、それぞれ一意なキーを介してアクセスします。
mapの代入演算子「=」とは?
map::operator=は代入演算子であり、あるコンテナの要素を別のコンテナへコピーするために使用されます。コピー元(右辺)の内容が、コピー先(左辺)の現在の内容を上書きする形で代入されるのが特徴です。
構文
Map_name1 = Map_name2;
演算子の左側にコピー先のmap、右側にコピー元のmapを記述します。実行すると、右側のmapのすべての要素が左側のmapにコピーされ、左側のmapにもともとあった内容は破棄されます。
パラメータ
この演算子は引数として、右辺のmapオブジェクトを受け取ります。右辺のmapの内容が、左辺のmapへコピーされます。
戻り値
この演算子には戻り値はありません。単純に左辺のmapの内容を置き換えるだけです。
使用例
入力例
map<int, int> newmap, themap;
newmap.insert({1, 20});
themap = newmap;
// 結果:themap = {1:20}このように、operator=を使うことで、newmapの要素がそのままthemapへコピーされます。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP, temp;
TP.insert({ 2, 20 });
TP.insert({ 1, 10 });
TP.insert({ 3, 30 });
TP.insert({ 4, 40 });
TP.insert({ 6, 50 });
temp = TP;
cout<<"\nData in map TP is: \n";
cout << "KEY\tELEMENT\n";
for (auto i = TP.begin(); i!= TP.end(); ++i) {
cout << i->first << '\t' << i->second << '\n';
}
cout << "\nData in copied map temp is : \n";
cout << "KEY\tELEMENT\n";
for (auto i = temp.begin(); i != temp.end(); ++i) {
cout << i->first << '\t' << i->second << '\n';
}
return 0;
}出力結果
Data in map TP is: MAP_KEY MAP_ELEMENT 1 10 2 20 3 30 4 40 6 50 Data in copied map temp is : MAP_KEY MAP_ELEMENT 1 10 2 20 3 30 4 40 6 50
まとめ
map::operator=を使えば、mapコンテナ同士のコピーを簡単かつ効率的に行うことができます。代入後は、コピー先のmapにはキー順にソートされた状態で同じ要素が格納されます。既存の内容を残したまま追記したい場合にはinsert()等を使用し、内容を丸ごと置き換えたい場合にはこの代入演算子を使う、という使い分けを覚えておくと便利です。
-
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)のイテレータを返します。このペアは、指定したキーと等価なキーを持つコンテナ内のすべての要素を含む範囲の境界を表し