Utilice la función std::map::find en C++
-
Utilice la función
std::map::find
para encontrar el elemento con un valor clave dado en C++ -
Utilice la función de miembro
contains
para comprobar si el elemento dado existe en un mapa en C++
Este artículo explica cómo utilizar la función std::map::find
y algunas de sus alternativas en C++.
Utilice la función std::map::find
para encontrar el elemento con un valor clave dado en C++
El objeto std::map
es uno de los contenedores asociativos en la biblioteca de plantillas estándar de C++ e implementa una estructura de datos ordenada, almacenando valores clave. Tenga en cuenta que las claves son únicas en el contenedor std::map
. Así, si se insertan nuevos elementos con las claves existentes, la operación no tiene ningún efecto. Aún así, algunas funciones miembro especiales en la clase std::map
pueden asignar nuevos valores a los pares existentes si las claves coinciden (por ejemplo, la función insert_or_assign
).
Las ventajas del contenedor std::map
incluyen operaciones rápidas de búsqueda, inserción y eliminación, que se pueden realizar en tiempo logarítmico. La operación de búsqueda la proporciona el miembro find
, que acepta una referencia a una clave. Si la clave dada se encuentra en el objeto std::map
, se devuelve el iterador al elemento correspondiente. Por otro lado, supongamos que la clave dada no se encuentra en el contenedor, se devuelve el iterador pasado al final (map::end()
).
El siguiente fragmento de código demuestra un escenario de uso simple donde un contenedor map
de pares de cadenas
se inicializa con valores arbitrarios, y luego se busca la clave con el valor "h"
. En consecuencia, procesamos el iterador devuelto con la instrucción if-else
para imprimir el par de elementos o enviar un mensaje de que no se encontró la clave dada.
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
auto item = m1.find(key);
if (item != m1.end()) {
cout << "Key exists! - {" << item->first << ";" << item->second << "}\n";
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
Producción :
Key exists! - {h;htop}
Utilice la función de miembro contains
para comprobar si el elemento dado existe en un mapa en C++
Si el usuario necesita confirmar si el par con el valor dado existe en el objeto map
, se puede utilizar la función miembro contains
. La función ha sido parte del contenedor std::map
desde la versión C++ 20, por lo que debe conocer la versión del compilador para ejecutar el siguiente fragmento de código. La función contains
toma una referencia a la clave y devuelve el valor bool
true
si se encuentra. La complejidad temporal de esta función miembro también es logarítmica.
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
if (m1.contains(key)) {
cout << "Key Exists!" << endl;
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
Producción :
Key Exists!
Alternativamente, se puede usar la función miembro cout
para verificar si el par de elementos con la clave dada existe en el map
. Generalmente, la función cout
se utiliza para recuperar el número de elementos con la clave dada, pero dado que std::map
almacena sólo valores clave únicos, el proceso devuelve 1
si se encuentra el elemento. De lo contrario, se devuelve un valor cero para indicar que no se encontró ningún elemento.
#include <iostream>
#include <map>
using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;
int main() {
std::map<string, string> m1 = {
{"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
{"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
};
string key = "h";
if (m1.count(key)) {
cout << "Key Exists!" << endl;
} else {
cout << "Key does not exist!" << endl;
}
return EXIT_SUCCESS;
}
Producción :
Key Exists!
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