Multiconjunto de tuplas en C++ con ejemplos

¿Qué es una tupla?

Una tupla en C++ es un objeto que une un grupo de elementos. Los elementos pueden ser similares, así como diferentes tipos de datos. Los elementos de las tuplas se inicializan en el orden en que se accederá a ellos.

Sintaxis:

tupla<tipo_datos1, tipo_datos2, tipodatos3, ….> myTuple 

Aquí,
dataType1, dataType2, dataType3 . . . . son tipos de datos similares o diferentes

Funciones asociadas a una tupla:

1. 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.

Sintaxis:

myTuple = make_tuple(valor1, valor2, valor3,….)

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.

Sintaxis:

get<índice>(miTupla)

Aquí,
index es el índice del elemento al que queremos acceder en myTuple. La indexación en una tupla comienza con cero. 

¿Qué es un conjunto múltiple?

Un conjunto múltiple es un tipo de contenedor asociativo que es similar a un conjunto, pero en el caso de un conjunto múltiple, todos los elementos deben ser distintos por pares. En palabras simples, puede haber más de un elemento con el mismo valor.

Sintaxis:

multiconjunto<tipo de datos> myMultiset;

Aquí,
dataType es un tipo de datos.

Funciones asociadas a multiset:  

  • begin(): Devuelve un iterador al primer elemento del conjunto múltiple.
  • end() : Devuelve un iterador al elemento teórico que sigue al último elemento del conjunto múltiple.
  • size() : Devuelve el número de elementos en el conjunto múltiple.
  • max_size() : Devuelve el número máximo de elementos que puede contener el conjunto múltiple.
  • vacío() : devuelve si el conjunto múltiple está vacío.

Un conjunto múltiple de tuplas puede ser bastante útil cuando un algoritmo requiere una estructura de datos compleja. Este artículo se centra en cómo crear un conjunto múltiple de tuplas en C++. Tenga en cuenta que, por simplicidad, se toma en consideración una tupla de tres elementos, pero una tupla también puede contener más o menos elementos.

Multiconjunto de tuplas

Un multiconjunto de tuplas es un multiconjunto en el que cada uno de los elementos es una tupla. 

Sintaxis:

multiconjunto<tupla<tipo de datos1, tipo de datos2, tipo de datos3>> multiconjuntoDeTuplas;

Aquí,
dataType1, dataType2, dataType3 son tipos de datos similares o diferentes.

Ejemplo 1: a continuación se muestra el programa C++ para implementar un conjunto múltiple de tuplas:

C++

// C++ program to illustrate the
// implementation of multiset of
// tuples
#include <bits/stdc++.h>
using namespace std;
  
// Function to print multiset contents
void print(multiset<tuple<int, int,
           int> >& multisetOfTuples)
 
{
  // Iterating over multisetOfTuples elements
  for (auto x : multisetOfTuples)
  {
    // Each element is a tuple itself
    tuple<int, int, int> tp = x;
 
    // Printing tuple elements
    cout << get<0>(tp) <<
            ' ' << get<1>(tp) <<
            ' ' << get<2>(tp) << '\n';
  }
}
 
// Driver code
int main()
{
  // Declaring a multiset of tuples
  multiset<tuple<int, int,
  int> > multisetOfTuples;
 
  // Initializing tuples
  tuple<int, int,
  int> tuple1;
  tuple1 = make_tuple(4, 2, 3);
 
  tuple<int, int,
  int> tuple2;
  tuple2 = make_tuple(2, 3, 5);
 
  tuple<int, int,
  int> tuple3;
  tuple3 = make_tuple(2, 3, 5);
 
  tuple<int, int,
  int> tuple4;
  tuple4 = make_tuple(2, 1, 4);
 
  tuple<int, int,
  int> tuple5;
  tuple5 = make_tuple(4, 2, 3);
 
 
  // Inserting into multiset
  multisetOfTuples.insert(tuple1);
  multisetOfTuples.insert(tuple2);
  multisetOfTuples.insert(tuple3);
  multisetOfTuples.insert(tuple4);
  multisetOfTuples.insert(tuple5);
 
  // Calling print function
  print(multisetOfTuples);
 
  return 0;
}

Producción:

2 1 4
2 3 5
2 3 5
4 2 3
4 2 3

Explicación:

En el resultado anterior, hay un total de cinco tuplas presentes en el conjunto múltiple, de las cuales (2, 3, 5) y (4, 2, 3) aparecen dos veces. De forma predeterminada, las tuplas se organizan en orden no descendente en el conjunto múltiple y siguen la siguiente lógica:

  1. En el multiconjunto, si el primer valor de dos tuplas es igual, se compara el segundo valor de las tuplas y, si también es igual, se compara el tercer valor.
  2. Pero siempre es posible pasar un comparador a un conjunto.

Ejemplo 2: a continuación se muestra el programa C++ para demostrar cómo pasar un comparador al conjunto múltiple que organiza un conjunto múltiple de elementos de tuplas en orden no ascendente.

C++

// C++ program to demonstrate the
// implementation of multiset of
// tuples by using custom comparator
#include <bits/stdc++.h>
using namespace std;
  
// Comparator for arranging elements
// in non-ascending order We can
// always modify the comparator as
// per the requirement
struct cmp
{
  // Arranging multiset elements in
  // non-ascending order
  bool operator()(const tuple<int, int,
                              int>& x,
                  const tuple<int, int,
                              int>& y)
  {
    // If first elements of corresponding
    // tuples are equal
    if (get<0>(x) == get<0>(y))
    {
      // If second elements of corresponding
      // tuples are equal
      if (get<1>(x) == get<1>(y))
        return get<2>(x) > get<2>(y);
       
      return get<1>(x) > get<1>(y);
    }
 
    return get<0>(x) > get<0>(y);
  }
};
 
// Function to print multiset elements
void print(multiset<tuple<int, int,
           int>, cmp>& multisetOfTuples)
{
  for (auto x : multisetOfTuples)
  {
    // Each element of the multiset is
    // tuple itself
    tuple<int, int, int> tp = x;
 
    // Printing tuple elements
    cout << get<0>(tp) <<
            ' ' << get<1>(tp) <<
            ' ' << get<2>(tp) << '\n';
  }
}
 
// Driver code
int main()
{
  // Declaring a multiset of tuples
  multiset<tuple<int, int,
                 int>, cmp> multisetOfTuples;
 
  // Initializing tuples
  tuple<int, int,
        int> tuple1;
  tuple1 = make_tuple(1, 2, 3);
 
  tuple<int, int,
        int> tuple2;
  tuple2 = make_tuple(2, 3, 5);
 
  tuple<int, int,
        int> tuple3;
  tuple3 = make_tuple(2, 3, 5);
 
  tuple<int, int,
        int> tuple4;
  tuple4 = make_tuple(2, 1, 4);
 
  tuple<int, int,
        int> tuple5;
  tuple5 = make_tuple(5, 8, 4);
 
  // Inserting into multiset
  multisetOfTuples.insert(tuple1);
  multisetOfTuples.insert(tuple2);
  multisetOfTuples.insert(tuple3);
  multisetOfTuples.insert(tuple4);
  multisetOfTuples.insert(tuple5);
 
  // Calling print function
  print(multisetOfTuples);
 
  return 0;
}

Producción:

5 8 4
2 3 5
2 3 5
2 1 4
1 2 3

Explicación:

En el resultado anterior, los elementos del conjunto múltiple se organizan según un orden no ascendente. La tupla con valores (2, 3, 5) tiene dos copias en el conjunto múltiple.

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 *