C++ でマップを繰り返し処理する方法
胡金庫
2023年10月12日
-
while
ループを使ってstd::map
要素を繰り返し処理する -
従来の
for
ループを用いたstd::map
要素の繰り返し処理する -
範囲ベースの
for
ループを用いたstd::map
要素の繰り返し処理 -
範囲ベースの
for
ループを使用してstd::map
キーと値のペアを繰り返し処理する
この記事では、C++ で map
を複数のメソッドを使って繰り返し処理する方法を説明します。
while
ループを使って std::map
要素を繰り返し処理する
まず、一時的なマップ構造体 tempMap
を定義し、任意のキーと値のペアで埋めます。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> tempMap = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
auto iter = tempMap.begin();
while (iter != tempMap.end()) {
cout << "[" << iter->first << "," << iter->second << "]\n";
++iter;
}
cout << endl;
return 0;
}
出力:
[1,Apple]
[2,Banana]
[3,Mango]
[4,Raspberry]
[5,Blackberry]
[6,Cocoa]
型指定子 auto
を用いて std::map
のイテレータを宣言していることに注意してください。これは map<int, string>::iterator
であり、明示的に指定することができます。
従来の for
ループを用いた std::map
要素の繰り返し処理する
さて、同じループを従来の for
反復で実装してみましょう。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> tempMap = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
for (auto iter = tempMap.begin(); iter != tempMap.end(); ++iter) {
cout << "[" << iter->first << "," << iter->second << "]\n";
}
cout << endl;
return 0;
}
範囲ベースの for
ループを用いた std::map
要素の繰り返し処理
範囲ベースのループは、しばらくの間 C++ プログラマの間では一般的な選択肢となっています。お使いのコンパイラが C++11 バージョンをサポートしている場合は、従来の面倒なループはもう考えずに、以下の例の優雅さをお楽しみください。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> tempMap = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
for (const auto &item : tempMap) {
cout << "[" << item.first << "," << item.second << "]\n";
}
cout << endl;
return 0;
}
範囲ベースの for
ループを使用して std::map
キーと値のペアを繰り返し処理する
このバージョンは C++17 標準から定義されており、連想コンテナ内での繰り返し処理をより柔軟に行えるようになっています。このメソッドのこれまでの例と比較した主な利点は、map
構造体内のキー値へのアクセスが便利であることで、プログラマにとっても読みやすさが向上します。
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
map<int, string> tempMap = {{
1,
"Apple",
},
{
2,
"Banana",
},
{
3,
"Mango",
},
{
4,
"Raspberry",
},
{
5,
"Blackberry",
},
{
6,
"Cocoa",
}};
for (const auto& [key, value] : tempMap) {
cout << "[" << key << "," << value << "]\n";
}
cout << endl;
return 0;
}
著者: 胡金庫