Utilice un contenedor de mapas STL en C++
-
Utilice
std::map
para declarar un objeto contenedor de mapas en C++ -
Utilizar la función miembro
find
para buscar un elemento específico en un mapa en C++ -
Utilice la función de miembro
insert
para almacenar un elemento en un mapa en C++ -
Utilice la función de miembro
merge
para unir elementos de dos objetos de mapa en C++
Esta guía le mostrará varios métodos de cómo utilizar el contenedor de mapas STL en C++.
Utilice std::map
para declarar un objeto contenedor de mapas en C++
El contenedor std::map
implementa una estructura de datos de pares clave-valor ordenada, donde las claves son únicas. Los valores clave clasifican los elementos del par en orden ascendente de forma predeterminada; sin embargo, el usuario puede pasar opcionalmente una función de comparación a la plantilla std::map
. Puede inicializar el objeto map
con una lista de valores donde cada elemento se especifica entre llaves separadas. En este caso, creamos un mapa de pares de cadenas
y luego imprimimos elementos del mismo en el flujo cout
. Tenga en cuenta que se accede a cada elemento como miembros std::pair
en el bucle for
.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Utilizar la función miembro find
para buscar un elemento específico en un mapa en C++
La función de miembro find
es útil para buscar un par clave-valor específico en el contenedor map
. La operación de búsqueda tiene una complejidad logarítmica. La función find
toma la referencia a una clave y devuelve el iterador al elemento con la clave equivalente. Cuando no se encuentra ningún elemento con la clave dada, se devuelve un iterador pasado al final.
El siguiente fragmento de código demuestra cómo inicializar un nuevo contenedor map
con los iteradores de rango. Observe que el primer iterador se recupera usando la función find
. Además, puede resultar útil comprobar la validez del iterador devuelto.
#include <cassert>
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m2(m1.find("11700K"), m1.end());
printMap(m2);
auto ret = m1.find("11700K");
assert(ret != m1.end());
std::map<string, string> m3(ret, m1.end());
printMap(m3);
return EXIT_SUCCESS;
}
Producción :
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;
Utilice la función de miembro insert
para almacenar un elemento en un mapa en C++
Puede agregar nuevos elementos al contenedor map
existente utilizando la función de miembro insert
. El miembro insert
toma la referencia al objeto que se va a agregar y devuelve un contenedor std::pair
que consiste en un iterador del elemento insertado y un valor bool
que indica el estado de inserción exitoso. Cuando la inserción falla, el iterador apunta al elemento que impidió la operación.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
auto ret1 = m1.insert({"1390P", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
ret1 = m1.insert({"1390", "Xeon W"});
if (!ret1.second) {
cout << "Not inserted!" << endl;
}
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
Not inserted!
11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;
Utilice la función de miembro merge
para unir elementos de dos objetos de mapa en C++
La función de miembro merge
se puede utilizar para unir los elementos de dos contenedores de mapa. Se llama desde el objeto map
que necesita almacenar los elementos combinados y toma otro map
como argumento. Después de la operación, todos los punteros y referencias a los elementos transferidos son válidos.
#include <iostream>
#include <map>
using std::cout;
using std::endl;
using std::map;
using std::string;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::map<string, string> m1 = {
{"11900K", "Core i9"},
{"11700K", "Core i7"},
{"11600K", "Core i5"},
{"1390P", "Xeon W"},
};
std::map<string, string> m4 = {
{"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};
m1.merge(m4);
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
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