Menu
Coddy logo textTech

Comprobar Claves

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 26 de 56.

Si bien el operador de corchetes es conveniente para acceder a los valores de un mapa, existe un problema potencial: ¿qué sucede si intentas acceder a una clave que no existe? Como aprendiste en la lección anterior, usar [] con una clave inexistente crea automáticamente esa clave con un valor por defecto.

A veces quieres comprobar si una clave existe antes de acceder a ella, sin crear accidentalmente nuevas entradas. Aquí es donde el método .count() resulta útil. Te indica si una clave específica está presente en el mapa.

El método .count() devuelve 1 si la clave existe y 0 si no existe:

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;
}

Este enfoque le permite verificar de forma segura la existencia de una clave y manejar ambos casos de manera apropiada, evitando que se creen entradas no deseadas en su mapa.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de préstamo de libros de una biblioteca utilizando un std::map. Tu programa rastreará qué libros están disponibles y utilizará el método .count() para verificar de forma segura si los libros existen antes de intentar acceder a su información.

Se proporcionarán las siguientes entradas:

  • Un número entero n que representa la cantidad de libros en la biblioteca
  • Luego n pares de entradas:
    • Una cadena que representa el título del libro
    • Un número entero que representa la cantidad de copias disponibles
  • Un número entero m que representa la cantidad de solicitudes de libros a verificar
  • Luego m cadenas que representan los títulos de los libros a buscar

Tu programa debe:

  1. Crear un std::map<std::string, int> llamado library
  2. Leer el número de libros y poblar el mapa con los títulos de los libros y sus copias disponibles
  3. Leer el número de solicitudes de libros
  4. Para cada solicitud de libro, utiliza el método .count() para verificar si el libro existe en la biblioteca
  5. Imprimir el mensaje apropiado basado en si el libro se encuentra o no

Utiliza el siguiente formato de salida exacto:

Para cada solicitud de libro:

  • Si el libro existe: Book "[book title]" is available with [number] copies
  • Si el libro no existe: Book "[book title]" is not available in the library

Utiliza el método .count() en una sentencia if para verificar la existencia del libro antes de acceder a su valor. Si library.count(bookTitle) devuelve 1, el libro existe y puedes acceder de forma segura a library[bookTitle] para obtener el número de copias. Si devuelve 0, el libro no existe en la biblioteca.

Hoja de referencia

El método .count() comprueba si una clave existe en un mapa sin crear nuevas entradas. Devuelve 1 si la clave existe y 0 si no:

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;
}

Esto evita la creación accidental de entradas no deseadas al comprobar la existencia de una clave, a diferencia de usar el operador de corchetes [] que crea automáticamente claves con valores por defecto.

Pruébalo tú mismo

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

int main() {
    // Leer el número de libros
    int n;
    cin >> n;
    
    // Crear el mapa de la biblioteca
    map<string, int> library;
    
    // Leer la información de los libros y llenar el mapa
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // Leer el número de solicitudes de libros
    int m;
    cin >> m;
    
    // TODO: Escribe tu código abajo
    // Procesar cada solicitud de libro usando el método .count()
    // Verificar si el libro existe e imprimir el mensaje apropiado
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo