C++ STLのmap::cbegin()関数とmap::cend()関数を徹底解説
この記事では、C++ STLにおけるmap::cbegin()関数とmap::cend()関数の動作、構文、具体的な使用例について詳しく解説します。
C++ STLにおけるマップ(map)とは?
マップ(map)は連想コンテナの一種で、キー値とマップ値の組み合わせからなる要素を特定の順序で格納することができます。マップコンテナでは、データは内部的に常にキーに基づいてソートされており、コンテナ内の値は一意のキーを通じてアクセスされます。
map::cbegin()とは?
map::cbegin()関数は、C++ STLに組み込まれた関数で、<map>ヘッダーファイル内で定義されています。cbegin()は「constant begin(定数の先頭)」を意味する関数です。
この関数は、マップコンテナの最初の要素を指す定数イテレータを返します。返されるイテレータは定数イテレータであるため、要素の変更には使用できません。イテレータをインクリメントまたはデクリメントしながら、マップコンテナ内の要素を順に走査するために利用できます。
構文
newmap.cbegin();
パラメータ
この関数は、引数(パラメータ)を受け取りません。
戻り値
関連付けられたマップコンテナの最初の要素を指すイテレータを返します。
使用例
入力
map<char, int> newmap; newmap['a'] = 1; newmap['b'] = 2; newmap['c'] = 3; newmap.cbegin();
出力
a = 1
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.insert({3, 50});
TP_Map.insert({2, 30});
TP_Map.insert({1, 10});
TP_Map.insert({4, 70});
// map::cbeginを使用して最初の要素を取得
auto temp = TP_Map.cbegin();
cout << "First element is: " << temp->first << " -> " << temp->second;
cout << "\nTP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.cbegin(); i != TP_Map.cend(); i++) {
cout << i->first << "\t" << i->second << endl;
}
return 0;
}出力
First element is: 1 -> 10 TP Map is: MAP_KEY MAP_ELEMENT 1 10 2 30 3 50 4 70
map::cend()とは?
map::cend()関数は、C++ STLに組み込まれた関数で、<map>ヘッダーファイル内で定義されています。cend()は「constant end(定数の末尾)」を意味する関数です。この関数は、関連付けられたマップコンテナの最後の要素の「次」を指す定数イテレータを返します。
返されるイテレータは定数イテレータであるため、要素の変更には使用できません。イテレータをインクリメントまたはデクリメントしながら、マップコンテナ内の要素を順に走査するために利用できます。
map::cbegin()とmap::cend()を組み合わせることで、範囲の開始位置と終了位置を指定し、コンテナ全体を効率的に走査することができます。
構文
newmap.cend();
パラメータ
この関数は、引数(パラメータ)を受け取りません。
戻り値
関連付けられたマップコンテナの最後の要素の次を指すイテレータを返します。
使用例
入力
map<char, int> newmap; newmap['a'] = 1; newmap['b'] = 2; newmap['c'] = 3; newmap.cend();
出力
error
cend()が返すイテレータは最後の要素の次を指すため、そのイテレータを直接参照(デリファレンス)しようとするとエラーが発生します。cend()はあくまで走査の終了条件として使用するものです。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int main() {
map<int, int> TP_Map;
TP_Map.insert({3, 50});
TP_Map.insert({2, 30});
TP_Map.insert({1, 10});
TP_Map.insert({4, 70});
cout << "\nTP Map is : \n";
cout << "MAP_KEY\tMAP_ELEMENT\n";
for (auto i = TP_Map.cbegin(); i != TP_Map.cend(); i++) {
cout << i->first << "\t" << i->second << endl;
}
return 0;
}出力
TP Map is: MAP_KEY MAP_ELEMENT 1 10 2 30 3 50 4 70
まとめ
map::cbegin()とmap::cend()は、マップコンテナを安全に走査するための定数イテレータを提供する関数です。通常のbegin()/end()と異なり、返されるイテレータを通じて要素を変更できないため、読み取り専用の走査を行いたい場合に適しています。キーに基づいて自動的にソートされたマップの内容を、先頭から末尾まで順番に出力する際にぜひ活用してください。
-
C++ STLのlist::cbegin()とcend()関数の使い方を解説
本記事では、C++におけるlist::cbegin()およびlist::cend()関数の動作について解説します。list::cbegin()とlist::cend()は、C++標準テンプレートライブラリ(STL)の一部として提供されているメンバ関数です。これらの関数を呼び出すには、ヘッダーファイル<list>をインクルードする必要があります。list::cbegin()とはlist::cbegin()は、リストの先頭要素を指す定数イテレータ(const_iterator)を返す関数です。このイテレータを使えばリストを走査することはできますが、リスト内の値を変更することはできません
-
C++ STLのmap・multimapを降順で扱う方法
一般に、C++のmapおよびmultimapは、デフォルトではキーを昇順で格納します。しかし、第3テンプレート引数として比較用の関数オブジェクトstd::greaterを指定することで、要素を降順で格納することも簡単にできます。 mapを降順で使用する 使用する主なメンバ関数 m.find() – 指定したキーを持つ要素へのイテレータを返します。見つからない場合はend()イテレータを返します。 m.erase() – マップから指定したキーの要素を削除します。 m.equal_range() – イテレータのペア(pair)を返します。このペアは、指定したキーと等しいキーを持つすべての要素