Mappa dentro C++ Libreria di modelli standard (STL)
In cosa consiste la mappa C++? Sintassi
In C++ MAP รจ un contenitore associativo che memorizza elementi in un modulo mappato. Ogni elemento nella mappa รจ composto da un valore-chiave e da 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. I valori mappati servono per archiviare il contenuto associato alla chiave. I due possono differire nei tipi, ma il tipo di membro li combina tramite un tipo di coppia che li combina entrambi.
Perchรฉ usare std::map?
Ecco i motivi per utilizzare la mappa:
- std:: map memorizza le chiavi univoche solo in ordine basato sui criteri di ordinamento scelti.
- ร facile e veloce cercare gli 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).
Sintassi
Per dichiarare std::map, utilizzare questa sintassi:
std::map<key_datatype, value_datatype>map_name;
- Migliori
key_datatypedenota il tipo di dati delle chiavi della mappa. - Migliori
value_datatypedenota il tipo di dati dei valori corrispondenti alle chiavi della mappa. - Migliori
map_nameรจ il nome della mappa.
Per esempio:
map<string, int> my_map;
Abbiamo dichiarato una mappa denominata my_map. La mappa avrร una stringa come chiave tipi di dati e numeri interi come valori tipo di dati.
Tipi di membri
Le funzioni membro possono utilizzare i seguenti tipi di membri come parametri o 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:
- inizio() - Questa funzione restituisce l'iteratore al primo elemento della mappa.
- misurare() -Questa funzione restituisce il numero di elementi in una mappa.
- vuoto() -Questa funzione restituisce un valore booleano che indica se una mappa รจ vuota.
- insert( coppia(chiave, valore)) โ Questa funzione inserisce una nuova coppia chiave-valore in una mappa.
- trova(val) โ Questa funzione fornisce l'iteratore all'elemento val se viene trovato. Altrimenti, restituirร m.end().
- Cancella (posizione dell'iteratore) โ Questa funzione elimina l'elemento nella posizione indicata dall'iteratore.
- cancella(const g) โ Questa funzione elimina il valore-chiave g da una mappa.
- Chiaro () -Questa funzione elimina tutti gli elementi da una mappa.
Iterazione sugli elementi della mappa
Puoi scorrere gli elementi della mappa. Dobbiamo semplicemente creare un iteratore e usarlo per questo.
Per 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:
Spiegazione del codice:
- 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 il
main()funzione. 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.
- Usa il
size()funzione per ottenere la dimensione della mappa denominata Studenti. Questo dovrebbe restituire un 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 del
main()funzione.
Inserimento dei dati in std::map
Puoi inserire elementi in std::map utilizzando il comando insert() funzione. Ricorda che le chiavi std::map devono essere univoche.
Quindi, controlla prima se ciascuna 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 viene inserita nella mappa una coppia chiave-valore.
- insert(inizio_itr, fine_itr) โ con questa variazione le voci verranno inserite nell'intervallo definito da start_itr e end_itr da un'altra mappa.
Migliori inserisci_o_ass() la funzione funziona allo stesso modo di insert() funzione, ma se la chiave data 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:
Spiegazione del codice:
- 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 il
main()funzione. 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.
- Usando il
insert_or_assign()funzione 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 valore in caso di completamento positivo.
- Fine del corpo del
main()funzione.
Ricerca in una mappa
Possiamo usare il find() funzione 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:
Spiegazione del codice:
- 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 il
main()funzione. Il { segna l'inizio del corpo dimain()funzione. - 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 del
main()funzione.
Eliminazione di dati da una mappa
Possiamo usare il erase() funzione per eliminare un valore da una mappa. Creiamo semplicemente un iteratore che punta all'elemento da eliminare. L'iteratore viene quindi passato al file erase() funzione.
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:
Spiegazione del codice:
- 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 il
main()funzione. Il { segna l'inizio del corpo delmain()funzione. - 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 del
main()funzione.
Sintesi
- Una mappa รจ un contenitore associativo che memorizza gli elementi in un formato mappato.
- Ogni elemento nella mappa ha un valore chiave e un valore mappato.
- In una mappa, due valori mappati non possono condividere valori chiave.
- I valori chiave aiutano a ordinare e identificare gli elementi in modo univoco.
- I valori mappati aiutano a memorizzare il contenuto associato alla chiave.
- C++ la mappa memorizza le chiavi univoche in ordine ordinato.
- Lavorare con C++ map, creiamo un iteratore per scorrere gli elementi.
- Con l'iteratore possiamo eseguire attivitร come la ricerca e l'eliminazione di elementi dalla mappa.






