Conjunto múltiple en la biblioteca de plantillas estándar (STL) de C++

Los conjuntos múltiples son un tipo de contenedores asociativos similares al conjunto, con la excepción de que varios elementos pueden tener los mismos valores. Algunas funciones básicas asociadas con multiset: 

  • begin() – Devuelve un iterador al primer elemento del conjunto múltiple –> O(1)
  • end() – Devuelve un iterador al elemento teórico que sigue al último elemento en el multiconjunto –> O(1)
  • size() – Devuelve el número de elementos en el conjunto múltiple –> O(1)
  • max_size() – Devuelve el número máximo de elementos que puede contener el conjunto múltiple –> O(1)
  • vacío() – Devuelve si el conjunto múltiple está vacío –> O (1)
  • insert (x) – Inserta el elemento x en el multiset –> O(log n)
  • clear() – Elimina todos los elementos del multiset –> O(n)
  •  erase(x) – Elimina todas las apariciones de x –> O(log n)

Implementación: 

CPP

// CPP Program to demonstrate the
// implementation of multiset
#include <iostream>
#include <iterator>
#include <set>
 
using namespace std;
 
int main()
{
    // empty multiset container
    multiset<int, greater<int> > gquiz1;
 
    // insert elements in random order
    gquiz1.insert(40);
    gquiz1.insert(30);
    gquiz1.insert(60);
    gquiz1.insert(20);
    gquiz1.insert(50);
 
    // 50 will be added again to
    // the multiset unlike set
    gquiz1.insert(50);
    gquiz1.insert(10);
 
    // printing multiset gquiz1
    multiset<int, greater<int> >::iterator itr;
    cout << "\nThe multiset gquiz1 is : \n";
    for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {
        cout << *itr << " ";
    }
    cout << endl;
 
    // assigning the elements from gquiz1 to gquiz2
    multiset<int> gquiz2(gquiz1.begin(), gquiz1.end());
 
    // print all elements of the multiset gquiz2
    cout << "\nThe multiset gquiz2 \n"
            "after assign from gquiz1 is : \n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << *itr << " ";
    }
    cout << endl;
 
    // remove all elements up to element
    // with value 30 in gquiz2
    cout << "\ngquiz2 after removal \n"
            "of elements less than 30 : \n";
    gquiz2.erase(gquiz2.begin(), gquiz2.find(30));
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << *itr << " ";
    }
 
    // remove all elements with value 50 in gquiz2
    int num;
    num = gquiz2.erase(50);
    cout << "\ngquiz2.erase(50) : \n";
    cout << num << " removed \n";
    for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) {
        cout << *itr << " ";
    }
 
    cout << endl;
 
    // lower bound and upper bound for multiset gquiz1
    cout << "\ngquiz1.lower_bound(40) : \n"
         << *gquiz1.lower_bound(40) << endl;
    cout << "gquiz1.upper_bound(40) : \n"
         << *gquiz1.upper_bound(40) << endl;
 
    // lower bound and upper bound for multiset gquiz2
    cout << "gquiz2.lower_bound(40) : \n"
         << *gquiz2.lower_bound(40) << endl;
    cout << "gquiz2.upper_bound(40) : \n"
         << *gquiz2.upper_bound(40) << endl;
 
    return 0;
}

C++

// CPP Code to remove an element from multiset which have
// same value
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    multiset<int> a;
    a.insert(10);
    a.insert(10);
    a.insert(10);
 
    // it will give output 3
    cout << a.count(10) << endl;
 
    // removing single instance from multiset
 
    // it will remove only one value of
    // 10 from multiset
    a.erase(a.find(10));
 
    // it will give output 2
    cout << a.count(10) << endl;
 
    // removing all instance of element from multiset
    // it will remove all instance of value 10
    a.erase(10);
 
    // it will give output 0 because all
    // instance of value is removed from
    // multiset
    cout << a.count(10) << endl;
 
    return 0;
}

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 *