C++ Variables de tipo set

Enviado por jvilella el Vie, 21/02/2020 - 10:58

Requisitos:

El tipo de variable set permite almacenar varios valores bajo una sola variable, pero cada valor sólo se almacena una vez.

Por ejemplo, si queremos saber cuales son todos los nombres (de pila, es decir, sólo el nombre, sin apellidos) de una clase no nos interesa guardar repeticiones.

Lo primero que se ha de hacer para poder utilizar set es añadir al principio del código esta línea:

#include <set>

Una variable de tipo set se declara así:

set < tipo_de_los_valores > nombre_de_la_variable;

y se le añaden elementos mediate su función insert.

Por ejemplo:

vector<string> v_nombres;
set<string> s_nombres;
string nombre;
int i = 0;
while (i < 5) {
  cin >> nombre;
  v_nombres.push_back(nombre);
  s_nombres.insert(nombre);
  i = i + 1;
}
cout << "Numero de elementos en vector: " << v_nombres.size() << endl;
cout << "Numero de elementos en set: " << s_nombres.size() << endl;

El código anterior pide al usuario cinco nombres, los introduce en un vector y en un set y finalmente dice cuántos elementos hay almacenados en el vector (variable v_nombres) y en el set (variable s_nombres). Si los nombres introducidos por el usuario fueran "Jorge", "Ana", "Miguel", "Jorge" y "Silvia" veríamos que el vector contiene 5 elementos (los cinco nombres en el orden en que los hemos introducido) mientras que el set sólo contendría 4 elementos ya que "Jorge" se ha introducido dos veces y por tanto la segunda vez, al ya existir en el set, no se ha almacenado.

Ahora, ¿cómo acceder a estos elementos en el set? Utilizaremos una sintaxis especial de for. Con esta sintaxis en lugar de tener la posición en la que estamos tenemos el valor específico en el que estamos. El formato de esta sintaxis de for es for (elemento : conjunto), por lo tanto en este caso el elemento es una variable de tipo string (porque el set contiene strings) y el conjunto es la variable de tipo set:

Por ejemplo el siguiente código muestra todos los elementos del set separándolos con una coma:

for (string it : s_nombres) {
  cout << it << ", ";
}

Podemos mirar si un valor existe en el set:

string nombre;
cin >> nombre;
if (s_nombres.count(nombre)) {
  cout << "Ese ya es un nombre conocido";
} else {
  cout << "Este es un nombre desconocido";
}

Por último, eliminar un elemento de un set es tan fácil como insertarlo, en este caso mediante su función erase:

s_nombres.erase("Miguel");

 

Printer Friendly, PDF & Email

Etiquetas

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.