En la biblioteca de plantillas estándar de C++, set, multiset, unordered_set, unordered_multiset se utilizan para almacenar elementos. Aunque son similares pero se diferencian entre sí en algunas funcionalidades. Las diferencias se discuten a continuación:
1. Conjunto : Son contenedores asociativos que almacenan elementos únicos siguiendo un orden específico. Las siguientes son las propiedades de los conjuntos:
- Almacena los valores en orden ordenado.
- Almacena solo valores únicos.
- Los elementos solo se pueden insertar o eliminar, pero no se pueden modificar.
- Podemos borrar más de 1 elemento dando la posición del iterador inicial y final.
- Recorrido mediante iteradores.
- Los conjuntos se implementan como árbol de búsqueda binario .
Sintaxis:
set<datatype> setname;
El siguiente ejemplo demuestra la aplicación de set.
CPP
// CPP program to demonstrate insert and // delete in set #include <bits/stdc++.h> using namespace std; // Driver code int main() { // set declare set<int> s; // Elements added to set s.insert(12); s.insert(10); s.insert(2); // duplicate added s.insert(10); s.insert(90); s.insert(85); s.insert(45); // Iterator declared to traverse // set elements set<int>::iterator it, it1, it2; cout << "Set elements after sort and " "removing duplicates:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; cout << '\n'; it1 = s.find(10); it2 = s.find(90); // elements from 10 to elements before // 90 erased s.erase(it1, it2); cout << "Set Elements after erase:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; return 0; }
Set elements after sort and removing duplicates: 2 10 12 45 85 90 Set Elements after erase: 2 90
2. Multiset : Son contenedores asociativos que almacenan múltiples elementos con valores equivalentes siguiendo un orden específico. Las siguientes son las propiedades de los conjuntos múltiples:
- Almacena elementos en orden ordenado.
- Permite el almacenamiento de múltiples elementos.
- Podemos borrar más de 1 elemento dando el iterador inicial y el iterador final.
Nota: Todas las demás propiedades son similares al conjunto.
Sintaxis:
multiset<datatype> multisetName;
El siguiente ejemplo demuestra la aplicación de Multiset.
CPP
// CPP program to demonstrate insert and // delete in set #include <bits/stdc++.h> using namespace std; // Driver Code int main() { // multiset declare multiset<int> s; // Elements added to set s.insert(12); s.insert(10); s.insert(2); // duplicate added s.insert(10); s.insert(90); s.insert(85); s.insert(45); // Iterator declared to traverse // set elements multiset<int>::iterator it, it1, it2; cout << "Multiset elements after sort\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; cout << '\n'; it1 = s.find(10); it2 = s.find(90); // elements from 10 to elements before 90 // erased s.erase(it1, it2); cout << "Multiset Elements after erase:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; return 0; }
Multiset elements after sort 2 10 10 12 45 85 90 Multiset Elements after erase: 2 90
3. unordered_set: Son contenedores asociativos que almacenan elementos únicos sin ningún orden en particular. Las siguientes son las propiedades de Unordered_sets:
- Los elementos se pueden almacenar en cualquier orden. (sin orden ordenado)
- Almacena solo valores únicos.
- Tabla hash utilizada para almacenar elementos.
- Solo podemos borrar el elemento para el que se da la posición del iterador.
Nota: Todas las demás propiedades son similares al conjunto.
Sintaxis:
unordered_set<datatype> setname;
El siguiente ejemplo demuestra la aplicación del conjunto desordenado.
CPP
// CPP program to demonstrate insert and // delete in unordered_set #include <bits/stdc++.h> using namespace std; int main() { // unordered_set declare unordered_set<int> s; // Elements added to set s.insert(12); s.insert(10); s.insert(2); // duplicate added s.insert(10); s.insert(90); s.insert(85); s.insert(45); s.insert(12); s.insert(70); // Iterator declared to traverse // set elements unordered_set<int>::iterator it, it1; cout << "Unordered_set elements after sort:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; cout << '\n'; it1 = s.find(10); // element 10 erased s.erase(it1); cout << "Unordered_set Elements after erase:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; return 0; }
Unordered_set elements after sort: 10 45 12 70 2 90 85 Unordered_set Elements after erase: 45 12 70 2 90 85
4. Unordered_multiset : es un contenedor asociativo que contiene un conjunto de elementos no únicos en orden desordenado. Las siguientes son las propiedades de Unordered_multiset:
- Los elementos se pueden almacenar en cualquier orden.
- Los elementos duplicados se pueden almacenar.
- Tabla hash utilizada para almacenar elementos.
- Solo podemos borrar el elemento para el que se da la posición del iterador.
Nota: Todas las demás propiedades son similares al conjunto.
Sintaxis:
unordered_multiset<datatype> multisetName;
El siguiente ejemplo demuestra la aplicación de conjuntos múltiples desordenados.
CPP
// CPP program to demonstrate insert and // delete in unordered_multiset #include <bits/stdc++.h> using namespace std; int main() { // unordered_multiset declare unordered_multiset<int> s; // Elements added to set s.insert(12); s.insert(10); s.insert(2); // duplicate added s.insert(10); s.insert(90); s.insert(85); s.insert(45); // Iterator declared to traverse // set elements unordered_multiset<int>::iterator it, it1; cout << "Unordered-Multiset elements after sort:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; cout << '\n'; it1 = s.find(10); // element 10 trained s.erase(it1); cout << "Unordered-Multiset Elements after " "erase:\n"; for (it = s.begin(); it != s.end(); it++) cout << *it << ' '; return 0; }
Unordered-Multiset elements after sort: 45 10 10 12 2 90 85 Unordered-Multiset Elements after erase: 45 10 12 2 90 85
Diferencia entre set, multiset, unordered_set, unordered_multiset:
- En palabras simples, set es un contenedor que almacena elementos ordenados y únicos . Si se agrega desordenado significa que los elementos no están ordenados .
- Si se agrega multiset significa que se permite el almacenamiento de elementos duplicados .
Este artículo es una contribución de SHAURYA UPPAL . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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