Mappa dentro C++ Libreria di modelli standard (STL)
โก Riepilogo intelligente
Mappa dentro C++ รจ un contenitore associativo della Standard Template Library che memorizza gli elementi come coppie chiave-valore ordinate, dove ogni chiave univoca corrisponde a un valore e consente una ricerca, un inserimento e una traversata ordinata rapidi.

In cosa consiste la mappa C++?
In C++Una mappa รจ un contenitore associativo che memorizza elementi in forma mappata. Ogni elemento nella mappa รจ composto da un valore chiave e un valore mappato. Due valori mappati non possono condividere gli stessi valori chiave.
I valori chiave sono utili per ordinare e identificare gli elementi in modo univoco, mentre i valori mappati memorizzano il contenuto associato a ciascuna chiave. I due possono differire nel tipo, ma il tipo membro li combina in una coppia che li contiene entrambi.
Prima di scrivere qualsiasi codice, รจ utile capire perchรฉ una mappa รจ spesso il contenitore piรน adatto.
Perchรฉ usare std::map?
Ecco alcuni motivi per utilizzare una mappa:
- std::map memorizza solo chiavi univoche, in ordine crescente in base ai criteri di ordinamento scelti.
- ร facile e veloce cercare elementi utilizzando la chiave.
- Ad ogni chiave รจ collegato un solo elemento.
- std::map puรฒ essere utilizzato come array associativo.
- std::map รจ implementabile utilizzando alberi binari bilanciati.
Per sfruttare questi vantaggi, iniziate dalla sintassi di dichiarazione.
Sintassi
Per dichiarare std::map, utilizzare questa sintassi:
std::map<key_datatype, value_datatype>map_name;
- Migliori tipo_dati chiave denota il tipo di dati delle chiavi della mappa.
- Migliori tipo_dati_valore denota il tipo di dati dei valori corrispondenti alle chiavi della mappa.
- Migliori nome_mappa รจ il nome della mappa.
Per esempio:
map<string, int> my_map;
Abbiamo dichiarato una mappa chiamata my_map. La mappa avrร una stringa come tipo di dato chiave e un numero intero come tipo di dato valore.
Tipi di membri
Le funzioni membro possono utilizzare i seguenti tipi di membro come parametri o come tipo di ritorno:
- tipo_chiave: Chiave (il primo parametro nel modello)
- tipo_mappato: T (il secondo parametro nel modello)
- confronto_chiave: Confronta (il terzo parametro nel modello)
- tipo_allocatore: Alloc (il quarto parametro nel modello)
- tipo_valore: paio
- valore_compara: Classe di funzioni nidificate per il confronto di elementi
- riferimento: allocator_type::riferimento
- riferimento_const: allocator_type::const_reference
- pointer: allocator_type::pointer
- const_pointer: allocator_type::const_pointer
- iteratore: un iteratore bidirezionale per value_type
- const_iterator: un iteratore bidirezionale per const value_type
- reverse_iterator: un iteratore inverso
- const_reverse_iterator: un iteratore inverso costante
- tipo_differenza: ptrdiff_t
- dimensione_tipo: taglia_t
Funzioni integrate di std::map
std::map viene fornito con funzioni integrate. Alcuni di questi includono:
- begin () โ Questa funzione restituisce l'iteratore al primo elemento della mappa.
- dimensione() โ Questa funzione restituisce il numero di elementi presenti in una mappa.
- vuoto() โ Questa funzione restituisce un valore booleano che indica se una mappa รจ vuota.
- inserisci(coppia(chiave, valore)) โ Questa funzione inserisce una nuova coppia chiave-valore in una mappa.
- trova(valore) โ Questa funzione restituisce l'iteratore all'elemento val se viene trovato. Altrimenti, restituisce m.end().
- cancella(posizione dell'iteratore) โ Questa funzione elimina l'elemento nella posizione indicata dall'iteratore.
- cancella(const g) โ Questa funzione elimina la coppia chiave-valore g da una mappa.
- chiaro() โ Questa funzione elimina tutti gli elementi da una mappa.
Una volta definite le funzioni, i seguenti esempi le mettono in pratica, a partire dall'iterazione.
Iterazione sugli elementi della mappa
ร possibile iterare sugli elementi della mappa. ร sufficiente creare un iteratore e utilizzarlo a questo scopo. Ad esempio:
esempio 1
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
- Includi il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni.
- Includi il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
- Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). Il { segna l'inizio del corpo della funzione.
- Crea una mappa denominata Studenti in cui le chiavi saranno numeri interi e i valori saranno stringhe.
- Inserisci valori nella mappa Studenti. Nella mappa verrร inserita una chiave pari a 200 e un valore Alice.
- Inserisci valori nella mappa Studenti. Nella mappa verrร inserita una chiave pari a 201 e un valore pari a John.
- Utilizza la funzione size() per ottenere la dimensione della mappa denominata Students. Dovrebbe restituire 2.
- Stampa del testo sulla console.
- Utilizzare un ciclo for per creare un iteratore denominato per scorrere gli elementi della mappa denominati Studenti.
- Stampa i valori della mappa Studenti sulla console.
- Fine del corpo del ciclo for.
- Fine del corpo della funzione main().
Inserimento dei dati in std::map
ร possibile inserire elementi in std::map utilizzando la funzione insert(). Ricorda che le chiavi di std::map devono essere univoche.
Quindi, per prima cosa verifica se ogni chiave รจ presente nella mappa. Se รจ presente, la voce non verrร inserita, ma restituisce l'iteratore per la voce esistente. Se non รจ presente, la voce viene inserita.
La funzione presenta le seguenti varianti:
- inserire(coppia) โ con questa variante, una coppia chiave-valore viene inserita nella mappa.
- inserisci(start_itr, end_itr) โ con questa variante, le voci verranno inserite all'interno dell'intervallo definito da start_itr e end_itr da un'altra mappa.
La funzione insert_or_assign() funziona allo stesso modo della funzione insert(), ma se la chiave specificata esiste giร nella mappa, il suo valore verrร modificato.
esempio 2
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
- Includi il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
- Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). Il { segna l'inizio del corpo della funzione.
- Crea una mappa denominata m dove le chiavi saranno numeri interi e i valori saranno numeri interi. Sono state inserite tre voci nella mappa.
- Inserisci una nuova voce nella mappa m. Nella mappa verrร inserita una chiave pari a 5 e un valore pari a 6.
- Tentativo di inserire una chiave giร esistente. Poichรฉ la chiave 1 esiste giร nella mappa, l'inserimento non verrร effettuato.
- Utilizzo della funzione insert_or_assign() per inserire o modificare una voce esistente. Poichรฉ la chiave 1 esiste giร , il suo valore verrร modificato in 6.
- Stampa del testo sulla console. Il carattere "\t" crea uno spazio orizzontale mentre il carattere "\n" sposta il cursore del mouse sulla riga successiva.
- Utilizzare per loop per creare un iteratore denominato itr per scorrere gli elementi della mappa denominata m.
- Stampa i valori della mappa m sulla console. Il carattere "\t" crea uno spazio orizzontale tra ciascuna chiave e il suo valore corrispondente. Al contrario, il carattere โ\nโ sposta il cursore del mouse sulla riga successiva dopo ogni iterazione.
- Fine del corpo del ciclo for.
- Il programma deve restituire un valore in caso di completamento positivo.
- Fine del corpo della funzione main().
Ricerca in una mappa
Possiamo usare la funzione find() per cercare elementi in una mappa tramite le loro chiavi. Se la chiave non viene trovata, la funzione restituisce std::map::end. Altrimenti, verrร restituito un iteratore dell'elemento cercato.
esempio 3
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file header iostream nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
- Includi il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
- Includi il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
- Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). La parentesi graffa { indica l'inizio del corpo della funzione main().
- Crea una mappa denominata Studenti le cui chiavi saranno numeri interi e stringhe di valori.
- Inserisci valori nella mappa Studenti. Nella mappa verrร inserita una chiave pari a 200 e un valore Alice.
- Inserisci valori nella mappa Studenti. Nella mappa verrร inserita una chiave pari a 201 e un valore pari a John.
- Cerca il valore associato alla chiave 201.
- Utilizzare un'istruzione if per verificare se viene trovato il valore della chiave.
- Stampa il valore della chiave insieme al testo sulla console.
- Fine del corpo dell'istruzione if.
- Fine del corpo della funzione main().
Eliminazione di dati da una mappa
Possiamo utilizzare la funzione erase() per eliminare un valore da una mappa. ร sufficiente creare un iteratore che punti all'elemento da eliminare. L'iteratore viene quindi passato alla funzione erase().
esempio 4
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
Produzione:
Ecco uno screenshot del codice:
Code Spiegazione:
- Includi il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
- Includi il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni.
- Includi il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
- Includi lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
- Chiama la funzione main(). La parentesi graffa { indica l'inizio del corpo della funzione main().
- Crea una mappa denominata my_map le cui chiavi saranno stringhe e valori interi.
- Inserisci i valori nella mappa my_map. Nella mappa verrร inserita la chiave Mucca e il valore 1.
- Inserisci i valori nella mappa my_map. Nella mappa verrร inserita una chiave Cat e un valore pari a 2.
- Aggiungi un valore 3 nella mappa my_map con la chiave di un leone.
- Crea un iteratore per scorrere la mappa my_map cercando la chiave cat.
- Elimina l'elemento puntato dall'iteratore.
- Utilizza un iteratore per scorrere gli elementi della mappa my_map dall'inizio alla fine.
- Stampa il contenuto della mappa my_map sulla console.
- Il programma deve restituire l'output una volta completato con successo.
- Fine del corpo della funzione main().






