Menu
CoddyTech

检查键是否存在

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

虽然方括号运算符可以方便地访问映射中的值,但也可能会遇到一个问题:如果你尝试访问一个不存在的键,会发生什么?正如你在上一课中学到的那样,对不存在的键使用 [] 会自动创建该键,并设置一个默认值。

有时,你想在访问键之前检查它是否存在,同时避免意外创建新条目。这时,.count() 方法就派上用场了。它会告诉你映射中是否存在特定的键。

如果键存在,.count() 方法会返回 1;如果不存在,则返回 0:

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

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

这种方法可以让你安全地检查键是否存在,并妥善处理两种情况,避免在映射中创建不需要的条目。

challenge icon

挑战

简单

使用 std::map 创建一个管理图书借阅系统的程序。你的程序将跟踪哪些图书可供借阅,并使用 .count() 方法在尝试访问信息前安全地检查图书是否存在。

程序将收到以下输入:

  • 一个整数 n,表示图书馆中的图书数量
  • 接下来是 n 对输入:
    • 一个字符串,表示书名
    • 一个整数,表示可借阅的副本数量
  • 一个整数 m,表示要检查的借阅请求数量
  • 接下来是 m 个字符串,表示要搜索的书名

你的程序应该:

  1. 创建一个名为 library 的 std::map<std::string, int>
  2. 读取图书数量,并将书名及其可借阅副本数量存入映射
  3. 读取借阅请求数量
  4. 对于每个借阅请求,使用 .count() 方法检查图书是否存在于图书馆中
  5. 根据是否找到图书,输出相应的信息

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

对于每个借阅请求:

  • 如果图书存在:Book "[book title]" is available with [number] copies
  • 如果图书不存在:Book "[book title]" is not available in the library

使用 .count() 方法在 if 语句中检查图书是否存在,然后再访问它的值。如果 library.count(bookTitle) 返回 1,表示图书存在,你可以安全地访问 library[bookTitle] 来获取副本数量。如果返回 0,表示图书馆中不存在这本书。

亲手试试

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

int main() {
    // 读取图书数量
    int n;
    cin >> n;
    
    // 创建图书馆映射表
    map<string, int> library;
    
    // 读取图书信息并填充映射表
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // 读取图书请求的数量
    int m;
    cin >> m;
    
    // TODO: 在下方编写你的代码
    // 使用 .count() 方法处理每个图书请求
    // 检查图书是否存在,并输出相应信息
    
    return 0;
}
quiz icon自我测试

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

逻辑与流程中的所有课

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