Inserción y eliminación en STL Set C++

Set es un contenedor implementado en lenguaje C++ en STL y tiene un concepto similar a cómo se define set en matemáticas. El hecho que separa al conjunto de los otros contenedores es que contiene solo los elementos distintos y los elementos se pueden recorrer en orden ordenado. Tener un fuerte control sobre los conjuntos es útil en la programación competitiva y en la resolución de problemas algorítmicos. La inserción y eliminación en conjuntos STL se analizan en este artículo.

Inserción

    Uso de insert() : la función de inserción se utiliza para insertar los elementos en el conjunto. Después de la inserción, se produce el reordenamiento de los elementos y se ordena el conjunto. Esta función se implementa de 3 maneras.

  • insert(ele) : Esta función inserta el elemento en el conjunto. La inserción solo tiene lugar cuando el elemento pasado no está ya en el conjunto. Devuelve un par de punteros. Primer elemento que apunta al elemento ya presente o recién insertado. Segundo elemento que devuelve el estado booleano «verdadero» o «falso».
  • insert(hint, ele) : en esta implementación, el puntero de sugerencia se envía con el elemento que se va a insertar. El uso del puntero de sugerencia es para ayudar a insert() a saber dónde debe realizarse la inserción real . Por lo tanto, tratando de reducir el tiempo para asignar el elemento. El puntero de sugerencia no fuerza la inserción en una posición específica. Esta función devuelve el puntero a la posición donde se inserta el elemento.
  • insert(beg_ptr, end_ptr) : este tipo de inserción es necesaria para insertar los elementos de otro contenedor en el conjunto. Los elementos repetidos no se insertan si están presentes en el contenedor de origen.
// C++ code to demonstrate the working of insert()
#include<iostream>
#include<set> // for set operations
using namespace std;
  
int main()
{
    // declaring set
    set<int> st;
  
    // declaring iterators
    set<int>::iterator it = st.begin();
    set<int>::iterator it1, it2;
  
    // declaring pair for return value of set containing
    // set iterator and bool
    pair< set<int>::iterator,bool> ptr;
  
    // using insert() to insert single element
    // inserting 20
    ptr = st.insert(20);
  
    // checking if the element was already present or newly inserted
    if (ptr.second)
        cout << "The element was newly inserted" ;
    else cout  << "The element was already present" ;
  
    // printing set elements after insertion
    cout << "\nThe set elements after 1st insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    // inserting set elements using hint
    st.insert(it, 24);
  
    // printing set elements after insertion
    cout << "\nThe set elements after 2nd insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    // inserting array elements in set
    // 24 is not inserted again
    int arr[3] = { 25, 24, 26 };
    st.insert(arr, arr+3);
  
    // printing set elements after insertion
    cout << "\nThe set elements after 3rd insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
}

Producción:

The element was newly inserted
The set elements after 1st insertion are : 20 
The set elements after 2nd insertion are : 20 24 
The set elements after 3rd insertion are : 20 24 25 26 

    Usando emplace : emplace también se usa para insertar el elemento en el Conjunto. Esta función es similar a «insertar()» discutida anteriormente, la única diferencia es que la construcción «en el lugar» del elemento se lleva a cabo en la posición de inserción del elemento al contrario de insertar() que copia o filma el objeto existente.

  • emplace() : inserta un elemento utilizando una estrategia de construcción in situ. Aumenta el tamaño del conjunto en 1. devuelve un par de punteros. El primer elemento del cual es un iterador que apunta a la posición del elemento insertado. 2nd devuelve una variable booleana que indica un elemento ya presente o recién creado .
  • emplace_hint() : Toma un «hint_iterator» para obtener una pista de la posición de inserción para posiblemente reducir el tiempo requerido para insertar el elemento insertado. Esto no afecta la posición de inserción. Tiene lugar donde se define internamente.
// C++ code to demonstrate the working of emplace()
// and emplace_hint()
#include<iostream>
#include<set> // for set operations
using namespace std;
  
int main()
{
    // declaring set
    set<int> st;
  
    // declaring iterators
    set<int>::iterator it = st.begin();
    set<int>::iterator it1, it2;
  
    // declaring pair for return value of set containing
    // set iterator and bool
    pair< set<int>::iterator,bool> ptr;
  
    // using emplace() to insert single element
    // inserting 24
    ptr = st.emplace(24);
  
    // checking if the element was already present or
    // newly inserted returns true. newly inserted
    if (ptr.second)
        cout << "The element was newly inserted" ;
    else cout  << "The element was already present" ;
  
    // printing set elements after insertion
    cout << "\nThe set elements after 1st insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    // using emplace() to insert single element
    // inserting 24 // not inserted this time
    ptr = st.emplace(24);
  
    // checking if the element was already present or
    // newly inserted returns false. already inserted
    if (ptr.second)
        cout << "\nThe element was newly inserted" ;
    else cout  << "\nThe element was already present" ;
  
    // printing set elements after insertion
    cout << "\nThe set elements after 2nd insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    // inserting set elements using hint
    st.emplace_hint(it,25);
  
    // printing set elements after insertion
    cout << "\nThe set elements after 3rd insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
}

Producción:

The element was newly inserted
The set elements after 1st insertion are : 24 
The element was already present
The set elements after 2nd insertion are : 24 
The set elements after 3rd insertion are : 24 25 
Supresión

    Uso de erase() : erase() se usa para borrar el elemento del conjunto mencionado en el argumento, ya sea su posición, su valor o un rango de números.

  • erase(num) : Borra el valor mencionado en su argumento. reordena el conjunto después de la eliminación.
  • erase(iter) : Borra el valor en la posición señalada por el iterador mencionado en su argumento.
  • erase(strt_iter,end_iter) : Borra el rango de elementos desde “strt_iter” hasta “end_iter”.
// C++ code to demonstrate the working of erase()
#include<iostream>
#include<set> // for set operations
using namespace std;
  
int main()
{
    // declaring set
    set<int> st;
  
    // declaring iterators
    set<int>::iterator it;
    set<int>::iterator it1;
    set<int>::iterator it2;
  
    // declaring pair for return value of set containing
    // set iterator and bool
    pair< set<int>::iterator,bool> ptr;
  
    // inserting values in set
    for (int i=1; i<10; i++)
        st.insert(i*5);
  
    // printing initial set elements
    cout << "The set elements after insertion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    it = st.begin();
  
    cout << endl;
  
    // erasing element using iterator
    // erases 2nd element i.e., 10
    ++it;
    st.erase(it);
  
    // printing set elements after deletion
    cout << "The set elements after 1st deletion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    // erasing element using value
    st.erase(40);
  
    // printing set elements after deletion
    cout << "\nThe set elements after 2nd deletion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    ++it;
    ++it;
    ++it;
    ++it;
  
    // erasing element using range iterator
    // deletes 25 - last(45)
    st.erase(it, st.end());
  
    // printing set elements 3rd deletion
    cout << "\nThe set elements after 3rd deletion are : ";
    for (it1 = st.begin(); it1!=st.end();  ++it1)
        cout << *it1 << " ";
  
    cout << endl;
}

Producción:

The set elements after insertion are : 5 10 15 20 25 30 35 40 45 
The set elements after 1st deletion are : 5 15 20 25 30 35 40 45 
The set elements after 2nd deletion are : 5 15 20 25 30 35 45 
The set elements after 3rd deletion are : 5 15 20 

Este artículo es una contribución de Manjeet Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *