【C++】std::mapを範囲ベースforループで反復処理する方法
この記事では、C++のstd::map型のオブジェクトに対して、範囲ベースforループ(range-based for loop)を使用する方法を解説します。
std::mapは、キーと値のペア(キーバリューペア)を格納できる連想コンテナです。内部ではpairオブジェクトとしてデータを保持しており、1つのキーとそれに対応する値がセットになって管理されます。キーと値の型はテンプレート引数で指定する仕組みのため、文字列や数値など、任意の型のデータを柔軟に扱えます。
範囲ベースforループを使えば、マップ内の各ペアを簡潔に反復処理することが可能です。以下のサンプルコードで、具体的な使い方を確認しましょう。
サンプルコード
#include<iostream>
#include<map>
using namespace std;
int main() {
map<char, string> my_map;
my_map.insert(pair<char, string>('A', "Apple"));
my_map.insert(pair<char, string>('B', "Ball"));
my_map.insert(pair<char, string>('C', "Cat"));
my_map.insert(pair<char, string>('D', "Dog"));
my_map.insert(pair<char, string>('E', "Eagle"));
my_map.insert(pair<char, string>('F', "Flag"));
my_map.insert(pair<char, string>('G', "Ghost"));
my_map.insert(pair<char, string>('H', "Hill"));
my_map.insert(pair<char, string>('I', "India"));
my_map.insert(pair<char, string>('J', "Jug"));
for(auto& key_val : my_map) {
cout << "The " << key_val.first << " is pointing to: " << key_val.second << endl;
}
return 0;
}
実行結果
The A is pointing to: Apple The B is pointing to: Ball The C is pointing to: Cat The D is pointing to: Dog The E is pointing to: Eagle The F is pointing to: Flag The G is pointing to: Ghost The H is pointing to: Hill The I is pointing to: India The J is pointing to: Jug
コードのポイント
範囲ベースforループでは、auto&を使って各要素への参照を受け取ります。std::mapの各要素はstd::pairであるため、key_val.firstでキーに、key_val.secondで値にアクセスできます。
なお、C++17以降では構造化束縛(structured bindings)を利用でき、for(auto& [key, value] : my_map)のように記述することで、キーと値をより直感的に取り出すことも可能です。用途に応じて使い分けると、コードの可読性がさらに向上します。
-
【保存版】Microsoft WordでGrammarlyを無料で使う方法|インストール手順を徹底解説
オフィスワークにおいて、文法スキルは非常に重要です。文法が正確な文章は、読み手にとって理解しやすく、読みやすいコンテンツになります。しかし、作成するすべてのレポートや資料の文法を完璧に保つには時間がかかり、結果的に生産性を低下させる原因にもなりかねません。そんなときに活躍するのが、Grammarlyのような文法チェックツールです。もちろん、Grammarlyは人間の編集者ほど完璧ではありませんが、それにかなり近い精度を誇ります。スペルミス、動詞の一致、主語と述語の整合性、文の構成、句読点の誤りなどを自動でチェックでき、有料版にアップグレードすればさらに高度な機能も利用可能です。文章を書く機会が
-
Rubyのmapメソッド完全ガイド!配列・ハッシュのデータ変換を実例で解説
Rubyのmapメソッドは、配列(Array)・ハッシュ(Hash)・範囲(Range)といったコレクションに対して使用できる強力なメソッドです。 mapの主な用途は、データの変換です。 例えば、文字列の配列があった場合、すべての文字列を順番に処理して、各文字を大文字に変換することができます。 また、Userオブジェクトのリストがある場合も同様です。 それらを変換して、対応するメールアドレスや電話番号など、Userクラスに定義された任意の属性のリストを作成できます。 それでは、具体的な使い方を見ていきましょう! Ruby mapメソッドの基本構文 mapの構文は次のようになっています。 a