Mappa in C ++ Standard Template Library (STL) con Example

Sommario:

Anonim

Cos'è std :: map?

In C ++, una MAP è un contenitore associativo che memorizza gli elementi in una 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. I valori mappati servono per memorizzare il contenuto associato alla chiave. I due possono differire nei tipi, ma il tipo di membro li combina tramite un tipo di coppia che combina entrambi.

In questo tutorial C ++ imparerai:

  • Cos'è std :: map?
  • Perché usare std :: map?
  • Sintassi:
  • Tipi di membri:
  • Funzioni integrate
  • Iterazione sugli elementi della mappa
  • Inserimento di dati in std :: map:
  • Ricerca in una mappa
  • Eliminazione di dati da una mappa

Perché usare std :: map?

Ecco i motivi per utilizzare la mappa:

  • std :: map memorizza le chiavi univoche solo in ordine ordinato in base ai criteri di ordinamento scelti.
  • È facile e veloce cercare gli elementi utilizzando la chiave.
  • A ciascuna chiave è associato un solo elemento.
  • std :: map può essere utilizzato come array associativo.
  • std :: map è implementabile utilizzando alberi binari (bilanciati).

Sintassi:

Per dichiarare std :: map, usa questa sintassi:

std::mapmap_name;
  • Il key_datatype denota il tipo di dati delle chiavi della mappa.
  • Value_datatype denota il tipo di dati dei valori corrispondenti alle chiavi della mappa.
  • Map_name è il nome della mappa.

Per esempio:

map my_map;

Abbiamo dichiarato una mappa denominata my_map. La mappa avrà una stringa come tipi di dati chiave e un intero come tipo di dati dei valori .

Tipi di membri:

Le funzioni membro possono utilizzare i seguenti tipi di membri come parametri o tipo restituito:

  • key_type: Key (il primo parametro nel modello)
  • mapped_type: T (Il secondo parametro nel modello)
  • key_compare: Compare (il terzo parametro nel modello)
  • allocator_type: Alloc (il quarto parametro nel modello)
  • value_type: pair
  • value_compare: classe di funzione annidata per il confronto di elementi
  • riferimento: allocator_type :: riferimento
  • const_reference: allocator_type :: const_reference
  • puntatore: 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
  • differenza_tipo: ptrdiff_t
  • size_type: size_t

Funzioni integrate

std :: map viene fornito con funzioni integrate. Alcuni di questi includono:

  • begin () - Questa funzione restituisce l'iteratore al primo elemento della mappa.
  • size () - Questa funzione restituisce il numero di elementi in una mappa.
  • empty () - Questa funzione restituisce un valore booleano che indica se una mappa è vuota.
  • insert (pair (key, value)) - Questa funzione inserisce una nuova coppia chiave-valore in una mappa.
  • find (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.
  • erase (const g) - Questa funzione elimina il valore-chiave g da una mappa.
  • Clear (): questa funzione elimina tutti gli elementi da una mappa.

Iterazione sugli elementi della mappa

Puoi iterare sugli elementi della mappa. Dobbiamo semplicemente creare un iteratore e usarlo per questo. Per esempio:

Esempio 1:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));cout << "Map size is: " << Students.size() << endl;cout << endl << "Default map Order is: " << endl;for (map::iterator it = Students.begin(); it != Students.end(); ++it) {cout << (*it).first << ": " << (*it).second << endl;}}

Produzione:

Ecco uno screenshot del codice:

Spiegazione del codice:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includere il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni.
  3. Includere il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
  4. Includere lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  5. Chiama la funzione main (). La {segna l'inizio del corpo della funzione.
  6. Crea una mappa denominata Studenti in cui le chiavi saranno numeri interi e i valori saranno stringhe.
  7. Inserisci valori nella mappa Studenti. Nella mappa verranno inseriti una chiave di 200 e un valore di Alice.
  8. Inserisci valori nella mappa Studenti. Nella mappa verranno inseriti una chiave 201 e un valore John.
  9. Usa la funzione size () per ottenere la dimensione della mappa denominata Studenti. Questo dovrebbe restituire un 2.
  10. Stampa del testo sulla console.
  11. Utilizzare un ciclo for per creare un iteratore denominato per iterare sugli elementi della mappa denominati Studenti.
  12. Stampa i valori della mappa Studenti sulla console.
  13. Fine del corpo del ciclo for.
  14. Fine del corpo della funzione main ().

Inserimento di dati in std :: map

Puoi inserire elementi in std :: map usando la funzione insert (). Ricorda che le chiavi std :: map devono essere univoche.

Quindi, prima controlla 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 ha le seguenti varianti:

  • insert (pair): con questa variante, una coppia chiave-valore viene inserita nella mappa.
  • insert (start_itr, end_itr) - con questa variazione, le voci verranno inserite all'interno dell'intervallo definito da start_itr e end_itr da un'altra mappa.

La funzione insert_or_assing () funziona allo stesso modo della funzione insert (), ma se la chiave data esiste già nella mappa, il suo valore verrà modificato.

Esempio 2:

#include #include using namespace std;int main() {map 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:

  1. Includere il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
  2. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  3. Includere lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  4. Chiama la funzione main (). La {segna l'inizio del corpo della funzione.
  5. Crea una mappa denominata m dove le chiavi saranno numeri interi e i valori saranno numeri interi. Nella mappa sono state inserite tre voci.
  6. Inserisci una nuova voce nella mappa m. Nella mappa verranno inseriti una chiave di 5 e un valore di 6.
  7. Tentativo di inserire una chiave già esistente. Poiché la chiave 1 esiste già nella mappa, l'immissione non verrà effettuata.
  8. 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.
  9. Stampa del testo sulla console. Il carattere "\ t" crea uno spazio orizzontale mentre il carattere "\ n" sposta il cursore del mouse sulla riga successiva.
  10. Usa un ciclo for per creare un iteratore chiamato itr per iterare sugli elementi della mappa denominati m.
  11. Stampa i valori della mappa m sulla console. Il carattere "\ t" crea uno spazio orizzontale tra ogni chiave e il valore corrispondente. Al contrario, il carattere "\ n" sposta il cursore del mouse sulla riga successiva dopo ogni iterazione.
  12. Fine del corpo del ciclo for.
  13. Il programma deve restituire un valore una volta completato con successo.
  14. Fine del corpo della funzione main ().

Ricerca in una mappa

Possiamo usare la funzione find () per cercare elementi in una mappa tramite i loro tasti. Se la chiave non viene trovata, la funzione restituisce std :: map :: end. In caso contrario, verrà restituito un iteratore dell'elemento cercato.

Esempio 2:

#include #include #include using namespace std;int main() {map Students;Students.insert(std::pair(200, "Alice"));Students.insert(std::pair(201, "John"));std::map::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:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
  2. Includere il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
  3. Includere il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni senza ottenere errori.
  4. Includere lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  5. Chiama la funzione main (). La {segna l'inizio del corpo della funzione main ().
  6. Crea una mappa denominata Studenti le cui chiavi saranno numeri interi e stringhe di valori.
  7. Inserisci valori nella mappa Studenti. Nella mappa verranno inseriti una chiave di 200 e un valore di Alice.
  8. Inserisci valori nella mappa Studenti. Nella mappa verranno inseriti una chiave 201 e un valore John.
  9. Cerca il valore associato a una chiave di 201.
  10. Utilizzare un'istruzione if per verificare se il valore per la chiave viene trovato.
  11. Stampa il valore della chiave accanto al testo sulla console.
  12. Fine del corpo dell'istruzione if.
  13. Fine del corpo della funzione main ().

Eliminazione di dati da una mappa

Possiamo usare la funzione erase () per eliminare un valore da una mappa. Creiamo semplicemente un iteratore che punta all'elemento da eliminare. L'iteratore viene quindi passato alla funzione erase ().

Esempio 3:

#include #include #include using namespace std;int main() {map my_map;my_map.insert(std::make_pair("cow", 1));my_map.insert(std::make_pair("cat", 2));my_map["lion"] = 3;map::iterator it = my_map.find("cat");my_map.erase(it);for (map::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:

  1. Includere il file di intestazione iostream nel nostro codice per utilizzare le sue funzioni.
  2. Includere il file di intestazione della stringa nel nostro codice per utilizzare le sue funzioni.
  3. Includere il file di intestazione della mappa nel nostro codice per utilizzare le sue funzioni.
  4. Includere lo spazio dei nomi std nel nostro codice per utilizzare le sue classi senza chiamarlo.
  5. Chiama la funzione main (). La {segna l'inizio del corpo della funzione main ().
  6. Crea una mappa denominata my_map le cui chiavi saranno stringhe e valori interi.
  7. Inserisce i valori nella mappa my_map. Nella mappa verrà inserita una chiave Cow e un valore 1.
  8. Inserisce i valori nella mappa my_map. Nella mappa verrà inserita una chiave di Cat e un valore di 2.
  9. Aggiungi un valore 3 nella mappa my_map con la chiave di un leone.
  10. Crea un iteratore per iterare sulla mappa my_map cercando la chiave cat.
  11. Elimina l'elemento puntato dall'iteratore.
  12. Usa un iteratore per scorrere gli elementi della mappa my_map dall'inizio alla fine.
  13. Stampa il contenuto della mappa my_map sulla console.
  14. Il programma deve restituire l'output una volta completato con successo.
  15. Fine del corpo della funzione main ().

Sommario:

  • Una mappa è un contenitore associativo che memorizza gli elementi in una forma mappata.
  • 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.
  • La mappa C ++ memorizza le chiavi univoche in ordine ordinato.
  • Per lavorare con la mappa C ++, creiamo un iteratore per iterare sugli elementi.
  • Con l'iteratore, possiamo eseguire attività come la ricerca e l'eliminazione di elementi dalla mappa.