C++ でマップを繰り返し処理する方法

胡金庫 2023年10月12日
  1. while ループを使って std::map 要素を繰り返し処理する
  2. 従来の for ループを用いた std::map 要素の繰り返し処理する
  3. 範囲ベースの for ループを用いた std::map 要素の繰り返し処理
  4. 範囲ベースの for ループを使用して std::map キーと値のペアを繰り返し処理する
C++ でマップを繰り返し処理する方法

この記事では、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;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Map