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 vectores es añadir al principio del código esta línea:

#include <set>

Una variable de tipo vector 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? Se tiene que usar un iterator (un iterador). Un iterador es un tipo de variable que recorre un conjunt de valores uno a uno guardando la posición en la que está del recorrido. Al ser una variable se debe declarar y se le debe dar un nombre, habitualmente it. Al iterador se le debe dar una posición inicial (normalmente s_nombres.begin()) , se debe indicar cuando acabar (normalmente cuando el iterador llegue a s_nombres.end(), es decir, que no queden más elementos en el conjunto) y como avanzar (para ir de uno en uno simplemente it++).

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

it = s_nombres.begin();
while (it != s_nombres.end()) {
  cout << *it << ", ";
  it++;
}

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.