Utilice la función std::map::find en C++

Jinku Hu 12 octubre 2023
  1. Utilice la función std::map::find para encontrar el elemento con un valor clave dado en C++
  2. Utilice la función de miembro contains para comprobar si el elemento dado existe en un mapa en C++
Utilice la función std::map::find 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!
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

Artículo relacionado - C++ Map