Crear un diccionario en C++

Jinku Hu 12 octubre 2023
  1. Usar el Constructor de Listas de Inicialización para crear un diccionario en C++
  2. Usar Constructor por defecto para crear un diccionario en C++
  3. Usar el Constructor copy para crear un diccionario en C++
  4. Use el Constructor basado en el rango para crear un diccionario en C++
Crear un diccionario en C++

Este artículo presentará cómo crear un diccionario en C++.

Usar el Constructor de Listas de Inicialización para crear un diccionario en C++

En la biblioteca de contenedores estándar de C++, un diccionario se llama std::map, que implementa pares ordenados de clave-valor con claves únicas. Las operaciones en los elementos del map como buscar, quitar e insertar pares tienen una complejidad logarítmica. Este método utiliza corchetes para inicializar el objeto map con valores literales. Observe que cada par de elementos está separado por la coma, como se muestra en el siguiente ejemplo de código.

#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;
}

Resultado:

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

Usar Constructor por defecto para crear un diccionario en C++

Alternativamente, podemos declarar un objeto de tipo map con parámetros dados y luego inicializar cada par llave-valor usando una declaración separada. En este ejemplo, demostramos un mapa con claves de int y los valores de string-s. Siempre podemos poner estas declaraciones en el bucle o tomar valores de la entrada del usuario, lo que se ajustaría mejor a un escenario de aplicación del mundo real.

#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;
}

Resultado:

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

Usar el Constructor copy para crear un diccionario en C++

Otra solución para crear un nuevo objeto map es usar un constructor copy, que toma otra variable map existente como argumento y copia los pares clave-valor al objeto recién inicializado. Observa que este método no mueve el objeto map existente y puede ser reutilizado más tarde durante la ejecución del programa.

#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;
}

Resultado:

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

Use el Constructor basado en el rango para crear un diccionario en C++

El constructor basado en el alcance es otra alternativa a los métodos anteriores. Esta solución puede ser utilizada para inicializar una nueva variable map con los pares clave-valor del subconjunto de algún objeto map existente. En este ejemplo, usamos el método find para especificar el primer par clave-valor en el rango. Por consiguiente, una nueva variable map2 contiene pares que comienzan desde el valor clave 2 hasta el último elemento del objeto 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;
}

Resultado:

map4 - [ 2:Banana 3:Mango 4:Raspberry 5:Blackberry 6:Cocoa ]
Autor: 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