Programación en C++/Librería Estándar de Plantillas/Maps

De Wikilibros, la colección de libros de texto de contenido libre.

C++ map estándar[editar]

map es un contenedor asociativo para contener en orden una
lista de parejas de valores únicos asociados como clave/valor.

En orden de poder crear objetos maps en nuestros programas deberemos incluir el uso de la clase map mediante la expresion:

#include <map>

Otro aspecto que se debe de entender acerca de la estructura map es que esta está organizada para contener elementos asociados en parejas, de ahi, la necesidad de entender el comportamiento de la plantilla pair.

C++ pair estandar[editar]

pair es una plantilla cuyo proposito es contener una pareja de valores.
los miembros de pair son dos, first es el nombre del primero de ellos y
el segundo se llama second.

Cada uno de los miembros de pair pueden ser de tipos diferentes. Para poder usar la plantilla pair en nuestro programa se debe de incluir la directiva:

#include <utility>

pair es una estructura independiente y puede ser usada con diversos fines, sin embargo, la importancia de pair radica en el hecho de que esta es usada como estructura elemental para construir contenedores tipo MAPS.

Antes de mostrar ejemplos de map mostraremos un par de ejemplos del uso de la estructura pair. Así, el siguiente programa utiliza pair para crear una pareja de valores asociados como (cadena, numero). La idea es la siguiente:

Se tiene una cierta cantidad numérica que representa la venta realizada en un día de la semana, y puesto que los días de la semana tienen nombres como:

  • "lunes"
  • "martes"
  • etc.

entonces podemos pensar en parejas de datos asociados tales como:

  • ("lunes", valor)
  • ("martes", valor)
  • etc.


  1. include <iostream>
  2. include <string>
  3. include <utility>
  4. include <iomanip>

using namespace std;

int main() {

 cout << "\"hola Mundo"\n";
   system("pause");
   system("pause");

}

map y pair: Ejemplo 1[editar]

El siguiente ejemplo se define un tipo de dato (typedef pair<string, double> venta_dia;) con el cúal se opera en el programa. La idea es crear un arreglo (map) de datos del tipo definido, de alli que el programa crea un objeto de map (semana) y utiliza el método insert() para insertar los elementos a la lista.

/*----------------------------------------*/
// Demostración: plantillas pair y map
// probado en: Dev-C++ 4.9.9.2

#include <iostream>
#include <string>
#include <utility>
#include <map>
#include <iomanip>

using namespace std;

/*----------------------------------------*/
typedef pair<string, double> venta_dia;

int main()
{
  cout << "\nUna simple prueba de map\n";
  cout << "........................\n";
  map<string, double> semana;

  semana.insert( venta_dia("lunes", 300.65) );
  semana.insert( venta_dia("martes", 456.12) );
  semana.insert( venta_dia("miercoles", 234.56) );
  double total = 0;

  map<string, double>::iterator p = semana.begin();
  while (p != semana.end() )
  {
    cout << setw(10) << p->first << setw(12) << p->second << endl;
    total += p->second;
    p ++;
  }

  cout << "........................\n";
  cout << setw(10) << "total:" << setw(12) << total << endl;

  system("pause");
  return 0;
}

map & pair: Ejemplo 2[editar]

/*----------------------------------------*/
// Demostración: plantillas map y pair
// probado en: Dev-C++ 4.9.9.2

#include <iostream>
#include <string>
#include <utility>
#include <map>
#include <iomanip>

using namespace std;

/*----------------------------------------*/
typedef pair<string, string> componente;

int main()
{
  cout << endl << "Otra simple prueba de map" << endl;

  map<string, string> directorio;

  directorio.insert( pair<string, string> ("Blanca", "555-6666") );
  directorio.insert( make_pair("Oscar", "555-5555"));

  directorio.insert( componente("Teresa", "555-4444"));
  directorio.insert( componente("Carlos", "555-3333"));
  directorio.insert( componente("Juan", "555-2222"));
  directorio.insert( componente("Ruben", "555-1111"));
  directorio.insert( componente("Andrea", "555-0000"));

  string s = "Ruben";

  map<string, string>::iterator p = directorio.find(s);
  if(p != directorio.end())
  cout << "Numero telefonico de : " << s << " = " << p->second << endl;
  else cout << s << " no está en el directorio.\n";

  system("pause");
  return 0;
}