Crea un dizionario in C++

Jinku Hu 12 ottobre 2023
  1. Usa il costruttore dell’lista di inizializzatori per creare un dizionario in C++
  2. Usa il costruttore predefinito per creare un dizionario in C++
  3. Usa il costruttore copy per creare un dizionario in C++
  4. Usa il costruttore basato su intervalli per creare un dizionario in C++
Crea un dizionario in C++

Questo articolo introdurrà come creare un dizionario in C++.

Usa il costruttore dell’lista di inizializzatori per creare un dizionario in C++

Nella libreria dei contenitori standard C++, un dizionario è chiamato std::map, che implementa coppie chiave-valore ordinate con chiavi univoche. Le operazioni sugli elementi della map come la ricerca, la rimozione e l’inserimento di coppie hanno una complessità logaritmica. Questo metodo utilizza le parentesi graffe per inizializzare l’oggetto map con valori letterali. Notare che ogni coppia di elementi è separata dalla virgola, come mostrato nell’esempio di codice seguente.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  cout << "map1 - ";
  PrintMap(map1);
  cout << endl;

  return EXIT_SUCCESS;
}

Produzione:

map1 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Usa il costruttore predefinito per creare un dizionario in C++

In alternativa, possiamo dichiarare un oggetto di tipo map con i parametri dati e quindi inizializzare ogni coppia chiave-valore utilizzando un’istruzione separata. In questo esempio, mostriamo una mappa con chiavi int e i valori di string. Possiamo sempre inserire queste istruzioni nel bucle o prendere valori dall’input dell’utente, che corrisponderebbero meglio a uno scenario di applicazione del mondo reale.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map2;
  map2[1] = "Banana";
  map2[2] = "Mango";
  map2[3] = "Cocoa";
  map2[4] = "Raspberry";

  cout << "map2 - ";
  PrintMap(map2);
  cout << endl;

  return EXIT_SUCCESS;
}

Produzione:

map2 - [ 1:Banana 2:Mango 3:Cocoa 4:Raspberry ]

Usa il costruttore copy per creare un dizionario in C++

Un’altra soluzione per creare un nuovo oggetto map è usare un costruttore copy, che prende un’altra variabile map esistente come argomento e copia le coppie chiave-valore nell’oggetto appena inizializzato. Si noti che questo metodo non sposta l’oggetto map esistente e può essere riutilizzato in seguito durante l’esecuzione del programma.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map3(map1);

  cout << "map3 - ";
  PrintMap(map3);
  cout << endl;

  return EXIT_SUCCESS;
}

Produzione:

map3 - [ 1:Apple 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]

Usa il costruttore basato su intervalli per creare un dizionario in C++

Il costruttore basato su intervalli è un’altra alternativa ai metodi precedenti. Questa soluzione può essere utilizzata per inizializzare una nuova variabile map con le coppie chiave-valore del sottoinsieme di alcuni oggetti map esistenti. In questo esempio, utilizziamo il metodo find per specificare la prima coppia chiave-valore nell’intervallo. Di conseguenza, una nuova variabile map2 contiene coppie a partire dal valore-chiave 2 fino all’ultimo elemento dell’oggetto map1.

#include <iostream>
#include <map>

using std::cin;
using std::copy;
using std::cout;
using std::endl;
using std::map;
using std::string;

template <typename Map>
void PrintMap(Map& m) {
  cout << "[ ";
  for (auto& item : m) {
    cout << item.first << ":" << item.second << " ";
  }
  cout << "]\n";
}

int main() {
  map<int, string> map1 = {{
                               1,
                               "Apple",
                           },
                           {
                               2,
                               "Banana",
                           },
                           {
                               3,
                               "Mango",
                           },
                           {
                               4,
                               "Raspberry",
                           },
                           {
                               5,
                               "Blackberry",
                           },
                           {
                               6,
                               "Cocoa",
                           }};

  map<int, string> map4(map1.find(2), map1.end());

  cout << "map4 - ";
  PrintMap(map4);
  cout << endl;

  return EXIT_SUCCESS;
}

Produzione:

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook