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.
- 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.
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.
// 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
- 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.
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.
// 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
- 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”.
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.
// 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