Utilice un contenedor de mapas STL en C++

Jinku Hu 12 octubre 2023
  1. Utilice std::map para declarar un objeto contenedor de mapas en C++
  2. Utilizar la función miembro find para buscar un elemento específico en un mapa en C++
  3. Utilice la función de miembro insert para almacenar un elemento en un mapa en C++
  4. Utilice la función de miembro merge para unir elementos de dos objetos de mapa en C++
Utilice un contenedor de mapas STL 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;
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