マップの作成
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 24/56。
マップが何であるかを理解したところで、マップを作成し、そこにキーと値のペアを追加する方法を学びましょう。std::map を宣言するときは、山括弧を使用してキーの型と値の型の両方を指定する必要があります。
マップを作成するための基本的な構文は次のとおりです。
std::map<KeyType, ValueType> mapName;例えば、生徒の名前をキー、テストの点数を値として格納するマップを作成するには、次のようにします:
std::map<std::string, int> studentScores;マップに要素を追加するには、キーを指定した角括弧表記を使用し、値を代入します:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;これにより、マップ内に3つのキーと値のペアが作成されます。各生徒の名前がキーとして機能し、対応するスコアを素早く取得できるようになります。
マップ内のすべてのエントリを反復処理するには、auto を使用した 範囲ベースの for ループ を使用します。std::map の各要素はキーと値のペアであるため、.first でキーに、.second で値にアクセスします。
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}ここでは、auto が各要素の型を自動的に推論し、pair.first がキー(生徒の名前)を、pair.second が値(スコア)を返します。std::map は常に キーによるソート順 で反復処理を行うことに注意してください。
チャレンジ
簡単std::map を使用して、学生の成績管理システムを構築するプログラムを作成してください。このプログラムでは、学生の名前をキー、テストのスコアを値として保存します。
以下の入力が提供されます:
- 学生の数を示す整数
n - その後、
n組の入力:- 学生の名前を示す文字列
- 学生のスコアを示す整数
プログラムは以下の処理を行う必要があります:
gradesという名前のstd::map<std::string, int>を作成する- 学生の数を読み込む
- 各学生について、名前とスコアを読み込み、角括弧記法を使用してマップに追加する
- すべての学生を追加した後、以下の形式で各学生の情報を出力する
- マップに保存されている学生の総数を計算して出力する
以下の正確な出力形式を使用してください:
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]学生は、マップを反復処理したときに現れる順序(マップは自動的にキーでソートされるため、アルファベット順になります)で出力する必要があります。範囲ベースの for ループを使用してマップを反復処理し、各キーと値のペアにアクセスして、学生の名前とそれに続くスコアを出力してください。
チートシート
std::mapを作成するには、山括弧内にキーと値の型を指定します:
std::map<KeyType, ValueType> mapName;文字列のキーと整数の値を持つ例:
std::map<std::string, int> studentScores;角括弧記法を使用して要素を追加します:
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;範囲ベースのforループを使用してマップを反復処理します。各要素はペアです。キーにアクセスするには.firstを、値にアクセスするには.secondを使用します:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}autoは各要素の型を自動的に推論し、const auto&は不必要なコピーを避けます。
自分で試してみよう
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// 学生の数を読み込む
int n;
cin >> n;
// 成績を保存するためのマップを作成する
map<string, int> grades;
// TODO: ここにコードを記述してください
// 各学生の名前とスコアを読み込み、マップに追加する
// 結果を表示する
cout << "Student Grades:" << endl;
// TODO: 範囲ベースのforループを使用して、各学生の成績を表示する
// 学生の総数を表示する
cout << "Total students: " << grades.size() << endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。