Проверка наличия ключей
Часть раздела Логика и управление потоком путешествия по 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;
}Этот подход позволяет безопасно проверить, существует ли ключ, и правильно обработать оба случая, не допуская создания нежелательных записей в вашей карте.
Задание
ЛегкоСоздай программу для управления системой выдачи книг в библиотеке с помощью std::map. Твоя программа будет отслеживать, какие книги доступны, и использовать метод .count(), чтобы безопасно проверять, существуют ли книги, прежде чем обращаться к информации о них.
Будут предоставлены следующие входные данные:
- Целое число
n, обозначающее количество книг в библиотеке - Затем
nпар входных данных:- Строка, обозначающая название книги
- Целое число, обозначающее количество доступных экземпляров
- Целое число
m, обозначающее количество запросов о книгах для проверки - Затем
mстрок с названиями книг для поиска
Твоя программа должна:
- Создать
std::map<std::string, int>с именемlibrary - Считать количество книг и заполнить карту названиями книг и количеством доступных экземпляров
- Считать количество запросов о книгах
- Для каждого запроса о книге использовать метод
.count(), чтобы проверить, есть ли книга в библиотеке - Вывести соответствующее сообщение в зависимости от того, найдена книга или нет
Используй следующий точный формат вывода:
Для каждого запроса о книге:
- Если книга существует:
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор получения адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память с помощью 'new'Освобождение памяти с помощью 'delete'Повторение — практика с указателями4Отображения (пары ключ—значение)
Знакомство с std::mapСоздание отображенияДоступ к значениям и их изменениеПроверка наличия ключейУдаление парПеребор отображенияПовторение — частотность слов2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с циклом forЦикл for на основе диапазонаУдаление элементовПовторение: операции с векторами5Проект: инструмент учёта запасов
Настройка проектаДобавление и обновление товаров3Проект: инструмент для списка задач
Обзор проектаДобавление задачиПотренируйтесь самостоятельно: Онлайн-компилятор C++