Menu
CoddyTech

Проверка наличия ключей

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 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. Создать std::map<std::string, int> с именем library
  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;
    
    // Создать карту library
    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++