Diferencia entre conjunto, multiconjunto, unordered_set, unordered_multiset en C++

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;
}
Producción

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;
}
Producción

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;
}
Producción

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;
}
Producción

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

Deja una respuesta

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