lunes, 18 de mayo de 2015

13 - Tutorial de C++ en español - map array asociativo




En este capítulo veremos como crear arrays asociativos a través de la librería map, uno de los ejemplos más interesantes que veremos es como recorrer uno a uno los elementos del array asociativo para extraer la clave y el valor de cada uno de ellos a través del miembro iterator de la clase map.

También haremos uso de typedef para definir tipos a través de un alias.

Y utilizaremos la clase pair que nos permite definir pares individuales de diferentes tipos para agregar elementos a un array asociativo map a través de insert.

Un array asociativo es aquel array en el que sus elementos van asociados a través de una determinada clave, es decir, es diferente a un array tradicional indexado, para acceder a un elemento de un array asociativo lo haremos a través de la clave asignada a dicho elemento.


map.cpp


#include <iostream>
#include <string>
#include <map>

using namespace std;

/* typedef: nos permite definir un determinado tipo asignándole un alias */
typedef pair<int, string> par;
typedef map<int, string> nombres;

int main()
{

 /* 
 Con la librería map podemos crear arrays asociativos, este tipo de arrays tienen en particular en que 
 sus elementos van asociados a través de una determinada clave y 
 no de un modo indexado como un array tradicional, map también nos proporciona una serie de herramientas 
 muy útiles para trabajar con este tipo de arrays */
 
 map<string, string> asociativo;
 asociativo["uno"] = "manzana";
 asociativo["dos"] = "pera";
 asociativo["tres"] = "naranja";

 //Acceder al valor de un determinado elemento
 cout << asociativo["tres"] << endl;
 
 map<string, string>::iterator iter;
 for (iter = asociativo.begin(); iter != asociativo.end(); iter++)
 {
  cout << "Clave=" << iter->first << ":Valor=" << iter->second << endl;
 }
 
 nombres n;
 n.insert(par(1, "Manuel"));
 n.insert(par(2, "Antonio"));
 map<int, string>::iterator i;
 for (i = n.begin(); i != n.end(); i++)
 {
  cout << "Clave=" << i->first << ":Valor=" << i->second << endl;   
 }

 system("PAUSE");
 return 0;
}