Accedere ai valori e modificarli
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 25 di 56.
Una volta che hai una mappa con coppie chiave-valore, spesso dovrai recuperare o aggiornare i valori memorizzati al suo interno. L'operatore parentesi quadre [] offre un modo pratico sia per accedere ai valori esistenti sia per modificarli.
Per accedere a un valore, usa semplicemente la chiave tra parentesi quadre:
std::map<std::string, int> scores;
scores["Alice"] = 95;
int aliceScore = scores["Alice"]; // Ottiene 95La stessa sintassi funziona per aggiornare i valori esistenti:
scores["Alice"] = 98; // Aggiorna il punteggio di Alice a 98Ecco un comportamento importante da ricordare: se usi l'operatore [] con una chiave che non esiste nella mappa, viene creato automaticamente un nuovo elemento con quella chiave e inizializzato con un valore predefinito (0 per gli interi, stringa vuota per le stringhe e così via).
int bobScore = scores["Bob"]; // Crea "Bob" con valore 0Questa funzione di creazione automatica rende l'operatore [] molto comodo sia per leggere che per scrivere i dati della mappa, perché non è necessario verificare se una chiave esiste prima di usarla.
Puoi anche scorrere tutte le coppie chiave-valore in una mappa usando un ciclo for basato su un intervallo. Ogni elemento nella mappa è una coppia, dove pair.first contiene la chiave e pair.second contiene il valore:
for (auto pair : scores) {
std::cout << pair.first << ": " << pair.second << std::endl;
}Questo stamperà ogni coppia chiave-valore memorizzata nella mappa, una per riga.
Sfida
FacileCrea un programma che gestisca un sistema di inventario dei prodotti utilizzando una std::map. Il tuo programma terrà traccia dei nomi dei prodotti e delle rispettive quantità attualmente disponibili, consentendoti di accedere ai livelli di inventario e aggiornarli.
Verranno forniti i seguenti input:
- Un intero
nche rappresenta il numero di prodotti iniziali - Poi
ncoppie di input:- Una stringa che rappresenta il nome del prodotto
- Un intero che rappresenta la quantità iniziale disponibile
- Una stringa che rappresenta il nome di un prodotto da aggiornare
- Un intero che rappresenta la nuova quantità disponibile per quel prodotto
Il tuo programma dovrebbe:
- Creare una
std::map<std::string, int>chiamatainventory - Leggere il numero di prodotti iniziali
- Per ogni prodotto, leggere il nome e la quantità disponibile, quindi aggiungerli alla mappa usando la notazione con le parentesi quadre
- Stampare l'inventario iniziale nel formato mostrato di seguito
- Leggere il nome del prodotto e la nuova quantità da impostare
- Usare l'operatore con le parentesi quadre per aggiornare la quantità disponibile del prodotto specificato
- Stampare l'inventario aggiornato mostrando il livello di scorte modificato
Usa esattamente il seguente formato di output:
Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...I prodotti devono essere stampati nell'ordine in cui compaiono durante l'iterazione sulla mappa (ordine alfabetico per nome del prodotto). Usa un ciclo for basato su intervallo per iterare sulla mappa entrambe le volte, accedendo a ciascuna coppia chiave-valore con pair.first per il nome del prodotto e pair.second per la quantità. Se il nome del prodotto da aggiornare non esiste nella mappa, l'operatore con le parentesi quadre creerà automaticamente una nuova voce con quel nome e la quantità specificata.
Provalo tu
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
// Leggi il numero di prodotti iniziali
int n;
cin >> n;
// Crea la mappa dell'inventario
map<string, int> inventory;
// Leggi i prodotti iniziali e le relative quantità
for (int i = 0; i < n; i++) {
string product;
int quantity;
cin >> product >> quantity;
// TODO: Aggiungi il prodotto alla mappa dell'inventario
}
// TODO: Stampa l'inventario iniziale
// Leggi il prodotto da aggiornare e la nuova quantità
string updateProduct;
int newQuantity;
cin >> updateProduct >> newQuantity;
// TODO: Aggiorna la quantità del prodotto nella mappa
// TODO: Stampa l'inventario aggiornato
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori4Mappe (coppie chiave-valore)
Introduzione a std::mapCreare una mappaAccedere ai valori e modificarliVerificare la presenza di chiaviRimuovere coppieIterare su una mappaRiepilogo - Frequenza delle parole2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online