Utilice el contenedor de mapas desordenados de STL en C++
-
Utilice el elemento
std::unordered_map
para declarar un contenedor de mapa desordenado en C++ -
Utilice la función de miembro
contains
para comprobar si el elemento dado existe en un mapa en C++ -
Utilice la función de miembro
erase
para eliminar el elemento específico de un mapa en C++ -
Utilice la función de miembro
insert
para agregar nuevos elementos a un mapa en C++
Este artículo explica varios métodos de cómo utilizar el contenedor STL unordered_map
en C++.
Utilice el elemento std::unordered_map
para declarar un contenedor de mapa desordenado en C++
El elemento std::unordered_map
implementa un contenedor asociativo de pares clave-valor donde cada clave es única. A diferencia del std::map
, el contenedor std::unordered_map
no almacena los elementos en orden. Por lo tanto, el contenedor se utiliza principalmente para la búsqueda de elementos y la posición no importa. Además, no se garantiza que la posición de los elementos durante la vida útil del objeto sea fija. Por tanto, el programador debería tratar el orden como indefinido.
El siguiente ejemplo demuestra la inicialización de la lista del contenedor unordered_map
y luego genera el contenido de ambos mapas. Tenga en cuenta que el orden descendente de los elementos m1
no implica que estén ordenados.
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
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::unordered_map<int, string> m1 = {
{1, "apple"},
{2, "banana"},
{3, "grape"},
{4, "orange"},
};
std::map<int, string> m2 = {
{1, "apple"},
{2, "banana"},
{3, "grape"},
{4, "orange"},
};
printMap(m1);
printMap(m2);
return EXIT_SUCCESS;
}
Producción :
4 : orange;
3 : grape;
2 : banana;
1 : apple;
1 : apple;
2 : banana;
3 : grape;
4 : orange;
Utilice la función de miembro contains
para comprobar si el elemento dado existe en un mapa en C++
La función miembro contains
ha sido parte del contenedor std::unordered_map
desde la actualización de C++ 20. Puede usar la función para verificar si el elemento dado existe en el mapa. Este comando acepta el valor-clave como único argumento y devuelve true
si se encuentra la clave. La función tiene el tiempo de ejecución promedio constante, siendo el peor de los casos el lineal dependiendo del tamaño del propio contenedor.
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
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::unordered_map<int, string> m1 = {
{1, "apple"},
{2, "banana"},
{3, "grape"},
{4, "orange"},
};
for (int x : {1, 2, 3, 4, 5}) {
if (m1.contains(x)) {
cout << x << ": Found\n";
} else {
cout << x << ": Not found\n";
}
}
return EXIT_SUCCESS;
}
Producción :
1: Found
2: Found
3: Found
4: Found
5: Not found
Utilice la función de miembro erase
para eliminar el elemento específico de un mapa en C++
Puede utilizar la función de miembro erase
para eliminar el par clave-valor dado del mapa. La función tiene tres sobrecargas, la primera de las cuales lleva el iterador al elemento del mapa, que debe eliminarse del contenedor. La segunda sobrecarga de función toma dos iteradores para especificar el rango, que se eliminará del mapa. Tenga en cuenta que el rango dado debe ser válido dentro del objeto contenedor que realiza la llamada. La tercera sobrecarga puede tomar el valor clave del elemento que debe eliminarse.
En el siguiente ejemplo, eliminamos cada elemento que tiene un número par como valor clave.
#include <iostream>
#include <map>
#include <unordered_map>
using std::cout;
using std::endl;
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::unordered_map<int, string> m1 = {
{1, "apple"},
{2, "banana"},
{3, "grape"},
{4, "orange"},
};
for (auto it = m1.begin(); it != m1.end();) {
if (it->first % 2 == 0)
it = m1.erase(it);
else
++it;
}
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
3 : grape;
1 : apple;
Utilice la función de miembro insert
para agregar nuevos elementos a un mapa en C++
Otra función miembro principal del contenedor unordered_map
es la función insert
, que puede utilizar para agregar nuevos elementos al mapa. La función tiene múltiples sobrecargas, pero utilizamos la primera que solo toma un par clave-valor. Tenga en cuenta que también usamos la función std::make_pair
para construir un nuevo par con los valores de los argumentos dados.
#include <iostream>
#include <map>
#include <unordered_map>
#include <vector>
using std::cout;
using std::endl;
using std::string;
using std::vector;
template <typename Map>
void printMap(Map& m) {
for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
cout << endl;
}
int main() {
std::unordered_map<int, string> m1 = {
{1, "apple"},
{2, "banana"},
{3, "grape"},
{4, "orange"},
};
vector<string> vec{"papaya", "olive", "melon"};
auto count = 0;
for (const auto& item : vec) {
m1.insert(std::make_pair(count, item));
}
printMap(m1);
return EXIT_SUCCESS;
}
Producción :
0 : papaya;
4 : orange;
3 : grape;
2 : banana;
1 : apple;
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