domingo, 23 de abril de 2023

Uso de pair, vector, string en programas de C++ (Mac OS 10.x y Visual Studio Code)

No cabe duda que estás personas de la OMI (Olimpiada Mexicana de Informática) me invitan a dar una interesante revisión, en este caso al lenguaje de programación de C (C++ para ser específicos) ya que lo poco que lo use no había o al menos no investigué o me ensañaron ciertas colecciones o tipos de datos complejos, aparte de las clases.

Mi hija con mucho pesar me dijo que al menos vídeos no hay muchos acerca de pair, sin embargo información escrita si hay un  poco más. Es por eso que escribo este breve post.

Pues bien antes de eso para darle sabor quería capturar un dato de tipo string, encontrándome  que no es tan simple como poner string var; por lo que investigando en stackoverflow vi una forma de solucionarlo.

#include <string>
#include <vector>

using namespace std;

int main(){
int n, c, dato;
std::string nombre;


Hay que poner el include del string, poner el using namespace std y definir la variable como std::string.

Volviendo a pair como su nombre lo indica es un pareja de datos, que no necesariamente tiene que ser del mismo tipo. Esta es una clase que tiene sus métodos y dos propiedades muy importantes como lo son el first y el second ya que con estas se leen los pares de valores.

Por un momento creí encontrar similitud con los Dictionary o Map, de C# y Java respectivamente sin embargo pair no es una colección, yo diría que es un tipo de datos compuesto, entonces si queremos tener una colección de pair una opción es usarlas con un otra clase llamada vector. 

Cuando explicaba a mis alumnos las colecciones, les decía que son arreglos con anabólicos, ya que nos resuelven muchas cosas que con los arreglos teníamos que programar tanto sus métodos como sus propiedades (que tiempos aquellos de estructura de datos con la maestra Lucía Barrón) es por ello que podemos dimensionar al vuelo, aplicar métodos para insertar, borrar, actualizar, sortear y un largo etcétera.

 Les dejo un código que muestra el uso de pair y vector.

#include <vector>

#include <iostream>

#include <string>
#include <utility>

using namespace std;

int main(){
vector <std::string> ciudades;
vector <int> distancias;
ciudades.push_back("Zac");
ciudades.push_back("Gto");
ciudades.push_back("Gdl");
ciudades.push_back("León");
ciudades.push_back("Col");

distancias.push_back(118);
distancias.push_back(180);
distancias.push_back(221);
distancias.push_back(127);
distancias.push_back(410);

vector <pair<std::string, int> > vciudad_distancia;

int i=0;

while(i<5){
pair <std::string, int> ciudad_distancia;
ciudad_distancia.first = ciudades[i];
ciudad_distancia.second = distancias[i];
vciudad_distancia.push_back(ciudad_distancia);
i++;
}

// Obtener la ciudad más lejana
int distanciamayor = vciudad_distancia[0].second;
i=0;
std::string ciudad_mas_lejana = vciudad_distancia[0].first;
while(i<5){
if(distanciamayor<vciudad_distancia[i].second){
distanciamayor = vciudad_distancia[i].second;
ciudad_mas_lejana = vciudad_distancia[i].first;
}
i++;
}

std::cout << "Ciudad más lejana:" << ciudad_mas_lejana << " ";
std::cout << "Distancia:" << distanciamayor << endl;

return 1;

} 

Tenemos 2 objetos de tipo vector, en una vienen las ciudades y en el otro las distancias hacia ellas, en base a ellos creamos un nuevo objeto de tipo 

vector que contiene un tipo pair en cada uno de sus elementos (vciudad_distancia), en algunos ejercicios que probamos se puede usar o no usar el objeto de tipo pair para introducirlo en el vector, aquí se utilizó la forma en como lo explican los materiales de la OMI, por lo cual creamos el objeto ciudad_distancia que es un pair al cual en la propiedad first se guarda el nombre de la ciudad destino y en second la distancia a la que se encuentra de Aguascalientes.

Hacemos el algoritmo para determinar la distancia más larga - un clásico de mis tiempos - y se muestra en la consola dicho resultado.

 Mi hija muy apurada encontró un vídeo de pair, en un inglés algo suigéneris por lo que yo grabé uno donde hago este ejemplo y si bien tengo algunos tropiezos, es parte también del quehacer del programador, ya que en este rol pasa mucho, sobre todo cuando estamos iniciando en un nuevo lenguaje o bien retomándolo después de mucho tiempo como es mi caso. Pueden checar el vídeo aquí.

Bueno espero haber sido claro y que los que llegaran a usar el vídeo no digan esta en español, pero parece como si hablará en chino. Hasta el siguiente post.

Miguel Araujo.

No hay comentarios:

Publicar un comentario

Python y el algebra lineal (2)

 Suma y resta de vectores y multiplicación de un escalar por un  vector Para la suma y resta de vectores los arreglos y/o vectores deben ser...