Deque de Tuplas en C++ con Ejemplos

¿Qué es Deque?

En C++ , un deque es un contenedor de secuencias y también se conoce con el nombre de cola de dos extremos. Como su nombre lo indica, un deque permite la inserción y eliminación desde ambos extremos. Aunque un deque es similar a un vector, los deques son más eficientes en comparación con los vectores. En los vectores, se garantiza la asignación de almacenamiento contiguo, pero este podría no ser el caso con deques. Deque es el caso especial de una cola ya que las operaciones de inserción y eliminación están permitidas en ambos extremos.

Funciones asociadas con un deque:

  • push_front() : Se usa para empujar elementos en el contenedor desde el frente.
  • push_back() : Se usa para empujar elementos en el contenedor desde atrás.
  • front() : Usado para referirse al primer elemento del contenedor.
  • back() : Se usa para referirse al último elemento del contenedor.

¿Qué es una Tupla?

Una tupla en C++ es un objeto que se utiliza para agrupar elementos. En una tupla, los elementos pueden ser del mismo tipo de datos o diferentes tipos de datos. Los elementos de las tuplas se inicializan en el orden en que se accederá a ellos.

Funciones asociadas a una tupla:

make_tuple() : make_tuple() se usa para asignar tupla con valores. Los valores pasados ​​deben estar en orden con los valores declarados en la tupla.2. get(): get() se utiliza para acceder a los valores de la tupla y modificarlos, acepta el índice y el nombre de la tupla como argumentos para acceder a un elemento de la tupla en particular.

¿Cómo acceder a una Tupla?

Para acceder a los elementos de una tupla, utilice la función get<>().

Sintaxis:

auto fistElement = get<0>(myTuple);

auto secondElement = get<1>(myTuple);

auto tercerElemento = get<2>(myTuple);

Este artículo se centra en cómo crear un vector 2D de tuplas en C++.

deque de tuplas

Deque de tuplas es un contenedor deque en el que cada elemento es una tupla por sí mismo. Aunque una tupla puede contener más o menos elementos por simplicidad, hemos considerado tuplas de tres elementos solamente. 

Sintaxis:

deque<tupla<tipo de datos1, tipo de datos2, tipo de datos3>> myContainer;

Aquí,

dataType1, dataType2 y dataType3 pueden ser tipos de datos similares o diferentes

Ejemplo 1: A continuación se muestra el programa C++ para implementar el deque de tuplas.

C++

// C++ program to demonstrate
// the working of deque
// of tuples
#include <bits/stdc++.h>
using namespace std;
  
// Function to print deque elements
void print(deque<tuple<string, 
           int, bool> >& myContainer)
{
    cout << "myContainer elements: \n\n";
  
    for (auto currentTuple : myContainer) 
    {
        // Each element of the deque is
        // a tuple itself
        tuple<string, int, bool> tp = 
                      currentTuple;
  
        cout << "[ ";
  
        // Printing tuple elements
        cout << get<0>(tp) << ', ' << 
                get<1>(tp) << ', ' << 
                get<2>(tp);
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a deque of tuples
    // of type {string, int, bool}
    deque<tuple<string, int, bool> >
          myContainer;
  
    // Declaring a tuple
    tuple<string, int, bool> tuple1;
  
    // Initializing the
    // tuple
    tuple1 = make_tuple("GeeksforGeeks", 
                         22, true);
  
    // Push the tuple at the front
    // in the deque
    myContainer.push_front(tuple1);
  
    // Declaring another tuple
    tuple<string, int, bool> tuple2;
  
    // Initializing the
    // tuple
    tuple2 = make_tuple("GFG", 
                         33, false);
  
    // Push the tuple at the back
    // in the deque
    myContainer.push_back(tuple2);
  
    // Declaring another tuple
    tuple<string, int, bool> tuple3;
  
    // Initializing the tuple
    tuple3 = make_tuple("Java", 
                         11, true);
  
    // Push the tuple at the front
    // in the deque
    myContainer.push_front(tuple3);
  
    // Declaring another tuple
    tuple<string, int, bool> tuple4;
  
    // Initializing the tuple
    tuple4 = make_tuple("Python", 
                         44, false);
  
    // Push the tuple at the back
    // in the deque
    myContainer.push_back(tuple4);
  
    // Calling print function
    print(myContainer);
  
    return 0;
}
Producción

myContainer elements: 

[ Java, 11, 1]
[ GeeksforGeeks, 22, 1]
[ GFG, 33, 0]
[ Python, 44, 0]

Ejemplo 2: A continuación se muestra el programa C++ para implementar deque de tuplas.

C++

// C++ program to demonstrate
// the working of deque
// of tuples
#include <bits/stdc++.h>
using namespace std;
  
// Function to print deque elements
void print(deque<tuple<string, 
           float, bool> >& myContainer)
{
    cout << "myContainer elements: \n\n";
  
    for (auto currentTuple : myContainer) 
    {
        // Each element of the deque is
        // a tuple itself
        tuple<string, float, bool> tp = 
                      currentTuple;
  
        cout << "[ ";
  
        // Printing tuple elements
        cout << get<0>(tp) << ', ' << 
                get<1>(tp) << ', ' << 
                get<2>(tp);
        cout << ']';
        cout << '\n';
    }
}
  
// Driver code
int main()
{
    // Declaring a deque of tuples
    // of type {string, float, bool}
    deque<tuple<string, float, bool> >
          myContainer;
   
    // Declaring a tuple
    tuple<string, float, bool> tuple1;
  
    // Initializing the
    // tuple
    tuple1 = make_tuple("GeeksforGeeks", 
                         2.123, false);
  
    // Push the tuple at the front
    // in the deque
    myContainer.push_front(tuple1);
  
    // Declaring another tuple
    tuple<string, float, bool> tuple2;
  
    // Initializing the
    // tuple
    tuple2 = make_tuple("GFG", 
                         3.123, false);
  
    // Push the tuple at the back
    // in the deque
    myContainer.push_back(tuple2);
  
    // Declaring another tuple
    tuple<string, float, bool> tuple3;
  
    // Initializing the tuple
    tuple3 = make_tuple("Java", 
                         1.123, true);
  
    // Push the tuple at the front
    // in the deque
    myContainer.push_front(tuple3);
  
    // Declaring another tuple
    tuple<string, float, bool> tuple4;
  
    // Initializing the tuple
    tuple4 = make_tuple("Python", 
                         4.123, true);
  
    // Push the tuple at the back
    // in the deque
    myContainer.push_back(tuple4);
  
    // Calling print function
    print(myContainer);
  
    return 0;
}
Producción

myContainer elements: 

[ Java, 1.123, 1]
[ GeeksforGeeks, 2.123, 0]
[ GFG, 3.123, 0]
[ Python, 4.123, 1]

Comparando elementos de deques de tuplas

Esta sección se centra en comparar los elementos de dos deques de tuplas. Los elementos de dos deques de tuplas se pueden comparar iterando sobre ambos deques.

Ejemplo: En el siguiente programa hemos creado dos deques de tuplas. Las tuplas son de tipo {int, char, bool}. Estamos comparando ambos deques elemento por elemento usando una función de comparación. Tenga en cuenta que cada elemento de ambos deques es una tupla en sí mismo y dos tuplas se consideran iguales si y si los objetos de datos correspondientes de las tuplas son iguales.  

C++

// C++ program to demonstrate
// comparing of two deque
// of tuples
#include <bits/stdc++.h>
using namespace std;
  
// Function to compare deque elements
bool compare(deque<tuple<int, char, 
             bool> >& myContainer1, 
             deque<tuple<int, char, 
             bool> >& myContainer2)
{
    // If deques are of unequal size
    if (myContainer1.size() != 
        myContainer2.size())
        return false;
  
    // Iterators
    // Initially pointing to the first elements
    auto it1 = myContainer1.begin();
    auto it2 = myContainer2.begin();
  
    while (it1 != myContainer1.end() && 
           it2 != myContainer2.end()) 
    {
        // Each element of the deque is
        // a tuple itself
        tuple<int, char, bool> tp1 = (*it1);
        tuple<int, char, bool> tp2 = (*it2);
  
        // Comparing corresponding tuples
        if (get<0>(tp1) != get<0>(tp2) || 
            get<1>(tp1) != get<1>(tp2) || 
            get<2>(tp1) != get<2>(tp2))
            return false;
  
        it1++;
        it2++;
    }
    return true;
}
  
// Driver code
int main()
{
    // Declaring a deque of tuples
    // of type {int, char, bool}
    deque<tuple<int, char, bool> > 
          myContainer1;
  
    // Declaring a tuple
    tuple<int, char, bool> tuple1;
  
    // Initializing the
    // tuple
    tuple1 = make_tuple(10, 'g', 
                        false);
  
    // Push the tuple at the front
    // in the deque
    myContainer1.push_front(tuple1);
  
    // Declaring another tuple
    tuple<int, char, bool> tuple2;
  
    // Initializing the
    // tuple
  
    tuple2 = make_tuple(20, 'd', 
                        false);
  
    // Push the tuple at the back
    // in the deque
    myContainer1.push_back(tuple2);
  
    // Declaring another tuple
    tuple<int, char, bool> tuple3;
  
    // Initializing the tuple
    tuple3 = make_tuple(30, 'a', 
                        true);
  
    // Push the tuple at the front
    // in the deque
    myContainer1.push_front(tuple3);
  
    // Declaring another tuple
    tuple<int, char, bool> tuple4;
  
    // Initializing the tuple
    tuple4 = make_tuple(40, 'k', 
                        true);
  
    // Push the tuple at the back
    // in the deque
    myContainer1.push_back(tuple4);
  
    // Declaring another deque of tuples
    // of type {int, char, bool}
    deque<tuple<int, char, bool> >
  
        myContainer2;
  
    // Push the tuple at the front
    // in the deque
    myContainer2.push_front(tuple1);
  
    // Push the tuple at the back
    // in the deque
    myContainer2.push_back(tuple2);
  
    // Push the tuple at the front
    // in the deque
    myContainer2.push_front(tuple3);
  
    // Push the tuple at the back
    // in the deque
    myContainer2.push_back(tuple4);
  
    // Declaring another deque of tuples
    // of type {int, char, bool}
    deque<tuple<int, char, bool> >
  
        myContainer3;
  
    // Declaring a tuple
    tuple<int, char, bool> tuple5;
    tuple5 = make_tuple(1, 'a', 
                        true);
  
    // Push the tuple at the front
    // in the deque
    myContainer3.push_front(tuple1);
  
    // Push the tuple at the back
    // in the deque
    myContainer3.push_back(tuple2);
  
    // Push the tuple at the front
    // in the deque
    myContainer3.push_front(tuple3);
  
    // Push the tuple at the back
    // in the deque
    myContainer3.push_back(tuple5);
  
    // Calling compare function
    if (compare(myContainer1, myContainer2))
        cout << 
        "myContainer1 and myContainer2 are equal.";
    else
        cout << "myContainer1 and " << 
                "myContainer2 are not equal.";
  
    cout << '\n';
  
    // Calling compare function
    if (compare(myContainer1, myContainer3))
        cout << "myContainer1 and " << 
                "myContainer3 are equal.";
    else
        cout << "myContainer1 and " << 
                "myContainer3 are not equal.";
  
    cout << '\n';
  
    // Calling compare function
    if (compare(myContainer2, myContainer3))
        cout << "myContainer2 and " << 
                "myContainer3 are equal.";
    else
        cout << "myContainer2 and " << 
                "myContainer3 are not equal.";
  
    return 0;
}
Producción

myContainer1 and myContainer2 are equal.
myContainer1 and myContainer3 are not equal.
myContainer2 and myContainer3 are not equal.

Publicación traducida automáticamente

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