Crear un diccionario en C++
- Usar el Constructor de Listas de Inicialización para crear un diccionario en C++
- Usar Constructor por defecto para crear un diccionario en C++
-
Usar el Constructor
copy
para crear un diccionario en C++ - Use el Constructor basado en el rango para 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 ]
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