Vector de conjuntos en C++

Requisito previo: Vectores en C++ STL

Los vectores se conocen como arrays dinámicas con la capacidad de cambiar su tamaño automáticamente cuando se inserta o elimina un elemento, y el contenedor maneja automáticamente su almacenamiento automáticamente.

Los conjuntos son un tipo de contenedores asociativos en los que cada elemento tiene que ser único porque el valor del elemento lo identifica. El valor del elemento no se puede modificar una vez que se agrega al conjunto, aunque es posible eliminar y agregar el valor modificado de ese elemento.

El vector de conjuntos se puede utilizar para diseñar estructuras de datos complejas y eficientes, en este artículo vamos a comprobar uno de esos casos en los que el vector de conjuntos podría ser muy útil.

Sintaxis:

vector<conjunto<tipo de datos>> v ;

Inserción en Vector de Conjuntos

Los elementos se pueden insertar en un vector usando la función push_back() de C++ STL . Primero inserte elementos en un conjunto usando insert() . Luego inserte ese conjunto en el vector usando push_back() .

El siguiente ejemplo demuestra la operación de inserción en un vector de conjuntos:

C++

// C++ program to demonstrate the
// insertion into a vector of sets
#include <bits/stdc++.h>
using namespace std;
 
// Defining the number of sets
// in the vector and number of
// elements in each set
#define ROW 4
#define COL 5
 
// Driver Code
int main()
{
    // Initialize vector of sets
    vector<set<int> > v;
 
    // Elements to insert
    // in column
    int num = 10;
 
    // Inserting elements
    // into vector
    for (int i = 0; i < ROW; i++) {
 
        // Stores the column elements
        set<int> s;
 
        for (int j = 0; j < COL; j++) {
            s.insert(num);
            num += 5;
        }
 
        // Push the set in the vector
        v.push_back(s);
    }
 
    // Display the vector of sets
    for (int i = 0; i < v.size(); i++) {
 
        for (auto x : v[i])
            cout << x << " ";
        cout << endl;
    }
    return 0;
}
Producción:

10 15 20 25 30 
35 40 45 50 55 
60 65 70 75 80 
85 90 95 100 105

Eliminación o eliminación en un vector de conjuntos

  1. Los conjuntos se pueden eliminar del final de un vector de conjuntos mediante la función pop_back() de C++ STL.

    El siguiente ejemplo demuestra la eliminación de conjuntos desde el final de un vector de conjuntos:

    C++

    // C++ program to demonstrate
    // the removal of sets from
    // the end of vector of sets
    #include <bits/stdc++.h>
    using namespace std;
     
    // Defining the number of sets
    // in the vector and number of
    // elements in each set
    #define ROW 4
    #define COL 5
     
    // Driver Code
    int main()
    {
        // Initialize the
        // vector of sets
        vector<set<int> > v;
     
        // Elements to insert
        // in column
        int num = 10;
     
        // Inserting elements
        // into vector
        for (int i = 0; i < ROW; i++) {
     
            // Vector to store
            // column elements
            set<int> s;
     
            for (int j = 0; j < COL; j++) {
                s.insert(num);
                num += 5;
            }
     
            // Push the set
            // into the vector
            v.push_back(s);
        }
     
        // Display the vector of sets
        // before removal of sets
        cout << "Before Removal:" << endl;
        for (int i = 0; i < v.size(); i++) {
     
            for (auto x : v[i])
                cout << x << " ";
            cout << endl;
        }
     
        // Remove sets from last
        // index of the vector
        v.pop_back();
        v.pop_back();
     
        // Display the vector of sets
        // after removal of sets
        cout << endl
             << "After Removal:" << endl;
     
        for (int i = 0; i < v.size(); i++) {
     
            for (auto x : v[i])
                cout << x << " ";
            cout << endl;
        }
        return 0;
    }
    Producción:

    Before Removal:
    10 15 20 25 30 
    35 40 45 50 55 
    60 65 70 75 80 
    85 90 95 100 105 
    
    After Removal:
    10 15 20 25 30 
    35 40 45 50 55
    
  2. El valor del elemento no se puede modificar una vez que se agrega al conjunto, aunque es posible eliminar el valor de ese elemento. La función erase() se usa para eliminar un elemento particular de un conjunto particular de un vector de conjuntos.

    El siguiente ejemplo demuestra la eliminación de un elemento de conjunto dado de un conjunto particular de un vector de conjuntos:

    C++

    // C++ program to demonstrate
    // the removal of sets from
    // the end of vector of sets
    #include <bits/stdc++.h>
    using namespace std;
     
    // Defining the number of sets
    // in the vector and number of
    // elements in each set
    #define ROW 4
    #define COL 5
     
    // Driver Code
    int main()
    {
        // Initialize vector of sets
        vector<set<int> > v;
     
        // Elements to insert
        // in column
        int num = 10;
     
        // Inserting elements
        // into vector
        for (int i = 0; i < ROW; i++) {
     
            // Vector to store
            // column elements
            set<int> s;
     
            for (int j = 0; j < COL; j++) {
                s.insert(num);
                num += 5;
            }
     
            // Push the set
            // into the vector
            v.push_back(s);
        }
     
        // Display the vector of sets
        // before removal of sets
        cout << "Before Removal:" << endl;
     
        for (int i = 0;
             i < v.size(); i++) {
     
            for (auto x : v[i])
                cout << x << " ";
            cout << endl;
        }
     
        // Erase 70 from 3rd set
        v[2].erase(70);
     
        // Erase 55 from 2nd set
        v[1].erase(55);
     
        // Display the vector of sets
        // after removal of sets
        cout << endl
             << "After Removal:" << endl;
     
        for (int i = 0; i < v.size(); i++) {
     
            for (auto x : v[i])
                cout << x << " ";
            cout << endl;
        }
        return 0;
    }
    Producción:

    Before Removal:
    10 15 20 25 30 
    35 40 45 50 55 
    60 65 70 75 80 
    85 90 95 100 105 
    
    After Removal:
    10 15 20 25 30 
    35 40 45 50 
    60 65 75 80 
    85 90 95 100 105
    

El siguiente ejemplo demuestra el uso del vector de conjuntos:

Dada una string S , la tarea es separar la string S dada en tres conjuntos diferentes de caracteres, es decir, vocal, consonantes o un carácter especial.

A continuación se muestra la implementación del problema anterior:

C++

// C++ program to implement vector of sets
#include <bits/stdc++.h>
using namespace std;
 
// Function to print set
// of different characters
void separateChar(string s)
{
    // Vector of set
    vector<set<char> > v(3);
 
    // Insert data in vector of set
    for (int i = 0;
         i < s.length(); i++) {
 
        if (s[i] >= 'a'
            && s[i] <= 'z') {
 
            // Insert vowels
            if (s[i] == 'a' || s[i] == 'e'
                || s[i] == 'i' || s[i] == 'o'
                || s[i] == 'u')
                v[0].insert(s[i]);
 
            // Insert consonants
            else
                v[1].insert(s[i]);
        }
        // Insert special characters
        else
            v[2].insert(s[i]);
    }
 
    // Iterate over all the sets
    for (int i = 0; i < 3; i++) {
 
        cout << "Elements of set "
             << i + 1 << " :";
 
        // Print elements of each set
        for (auto it : v[i]) {
 
            cout << it << " ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
    string s = "geeks@for&geeks@";
 
    // Function Call
    separateChar(s);
}
Producción:

Elements of set 1 :e o 
Elements of set 2 :f g k r s 
Elements of set 3 :& @

Publicación traducida automáticamente

Artículo escrito por vermaaayush68 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 *