マップの作成
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部。レッスン 24/56。
map とは何かを理解したところで、次は map の作成方法とキーと値のペアの追加方法を学びましょう。std::map を宣言するときは、山括弧を使ってキーの型と値の型の両方を指定する必要があります。
マップを作成するための基本構文は次のとおりです。
std::map<KeyType, ValueType> mapName;例えば、student 名をキーとして、テストの scores を値として store する map を作成するには:
std::map<std::string, int> studentScores;マップに要素を追加するには、キーを角括弧記法で指定し、その後に値を代入します。
studentScores["Alice"] = 95;
studentScores["Bob"] = 87;
studentScores["Carol"] = 92;これにより、map に 3 つのキーと値の pair が作成されます。各 student の名前は、対応する score をすばやく取得できるキーとして機能します。
map のすべての要素を反復処理するには、auto を使用した範囲ベースの for ループを使えます。std::map の各要素はキーと値の pair であり、.first を使ってキーに、.second を使って値にアクセスできます:
for (const auto& pair : studentScores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}ここでは、auto が各要素(キーと値のペア)の型を自動的に推論し、pair.first でキー(学生の名前)を取得でき、pair.second で値(点数)を取得できます。std::map はキーで要素を自動的にソートした状態に保つため、map を反復処理するとエントリがアルファベット順に出力されることに注意してください。
チャレンジ
簡単Create a std::map を使用して、student の成績追跡システムを構築するプログラムを作成してください。プログラムは、student の名前をキーとして、テストの score を値として store します。
次の入力が提供されます。
- student の number を表す整数
n - 続いて
n組の入力:- student の名前を表す string
- student の score を表す整数
プログラムでは、次の処理を行ってください。
std::map<std::string, int>namedgradesを Create する- student の number を Read する
- each student について、名前と score を Read し、角括弧表記を using して map に add する
- すべての student を add した後、以下に示す format で each student の情報を Print する
- map に store された student の total number を Calculate して Print する
次の exact output format を使用してください。
Student Grades:\n[student1]: [score1]\n[student2]: [score2]\n[student3]: [score3]\n...\nTotal students: [number of students]student は、map を loop したときに現れる順序で Print してください(map は key で auto sort されるため、alphabetical order になります)。range-based for loop を using して map を loop し、each key-value pair に access して、student の名前 followed by score を Print してください。
自分で試してみよう
#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;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
自分で練習してみよう: C++オンラインコンパイラ