マップの作成
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 ループを使用してマップを反復処理し、各キーと値のペアにアクセスして、学生の名前とそれに続くスコアを出力します。
自分で試してみよう
#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;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。