Menu
CoddyTech

访问和修改值

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 25 课,共 56 课。

有了包含键值对的映射后,你通常需要获取或更新其中存储的值。方括号 [] 运算符可以方便地访问已有的值并修改它们。

要访问一个值,只需在方括号中使用键:

std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // 获取 95

相同的语法也适用于更新现有值:

scores["Alice"] = 98; // 将 Alice 的分数更新为 98

请记住一个重要的行为:如果你使用 [] 运算符访问映射中不存在的键,它会自动创建一个带有该键的新元素,并将其初始化为默认值(整数的默认值为 0,字符串的默认值为空字符串,等等)。

int bobScore = scores["Bob"]; // 创建 "Bob",值为 0

这个自动创建功能让 [] 运算符在读取和写入映射数据时都非常方便,因为你不需要在使用键之前检查它是否存在。

你也可以使用基于范围的 for 循环遍历映射中的所有键值对。映射中的每个元素都是一个键值对,其中 pair.first 存储键,pair.second 存储值:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

这会逐行输出映射中存储的每个键值对。

challenge icon

挑战

简单

创建一个程序,使用 std::map 管理产品库存系统。程序会跟踪产品名称及其当前库存数量,让你能够查看和更新库存水平。

程序会收到以下输入:

  • 一个整数 n,表示初始产品的数量
  • 接下来是 n 组输入:
    • 一个表示产品名称的字符串
    • 一个表示初始库存数量的整数
  • 一个表示要更新的产品名称的字符串
  • 一个表示该产品新库存数量的整数

你的程序应该:

  1. 创建一个名为 inventory 的 std::map<std::string, int>
  2. 读取初始产品的数量
  3. 对于每个产品,读取名称和库存数量,然后使用方括号表示法将它们添加到映射中
  4. 按照下方所示的格式输出初始库存
  5. 读取要更新的产品名称和新数量
  6. 使用方括号运算符更新指定产品的库存数量
  7. 输出更新后的库存,显示修改后的库存水平

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

Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...

产品应按照遍历映射时的顺序输出(按产品名称的字母顺序排列)。使用基于范围的 for 循环遍历映射两次,通过 pair.first 获取每个键值对中的产品名称,通过 pair.second 获取数量。如果要更新的产品名称不在映射中,方括号运算符会自动创建一个使用该名称和指定数量的新条目。

亲手试试

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // 读取初始商品的数量
    int n;
    cin >> n;
    
    // 创建库存映射
    map<string, int> inventory;
    
    // 读取初始商品及其数量
    for (int i = 0; i < n; i++) {
        string product;
        int quantity;
        cin >> product >> quantity;
        // TODO: 将商品添加到库存映射中
    }
    
    // TODO: 输出初始库存
    
    // 读取要更新的商品和新数量
    string updateProduct;
    int newQuantity;
    cin >> updateProduct >> newQuantity;
    
    // TODO: 更新映射中的商品数量
    
    // TODO: 输出更新后的库存
    
    return 0;
}
quiz icon自我测试

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

逻辑与流程中的所有课

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