Menu
CoddyTech

创建映射

本课属于 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;

这会在映射中创建三个键值对。每位学生的姓名都作为键,让你可以快速查找对应的分数。

要遍历映射中的所有元素,你可以使用带有 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 会自动按键对元素排序,因此遍历映射时会按字母顺序打印条目。

challenge icon

挑战

简单

使用 std::map 创建一个学生成绩跟踪系统。你的程序会将学生姓名存储为键,将他们的考试成绩存储为值。

程序会接收以下输入:

  • 一个整数 n,表示学生人数
  • 接着是 n 组输入:
    • 一个表示学生姓名的字符串
    • 一个表示学生成绩的整数

你的程序应当:

  1. 创建一个名为 grades 的 std::map<std::string, int>
  2. 读取学生人数
  3. 对于每位学生,读取他们的姓名和成绩,然后使用方括号表示法将其添加到映射中
  4. 添加所有学生后,按照下方所示的格式打印每位学生的信息
  5. 计算并打印映射中存储的学生总人数

使用以下确切的输出格式:

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 来存储成绩
    map<string, int> grades;
    
    // TODO:在这里编写你的代码
    // 读取每个学生的姓名和分数,然后添加到 map 中
    
    
    // 输出结果
    cout << "Student Grades:" << endl;
    // TODO:使用基于范围的 for 循环输出每个学生的成绩
    
    
    // 输出学生总人数
    cout << "Total students: " << grades.size() << endl;
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器