conjunto desordenado de pares en C++ con ejemplos

¿Qué es par?

El encabezado de utilidad en C++ nos proporciona un contenedor de pares . Un par consta de dos elementos de datos u objetos. 

  • Se hace referencia al primer elemento como ‘primero’ y al segundo elemento como ‘segundo’ y el orden es fijo (primero, segundo).
  • Par se utiliza para combinar dos valores que pueden ser de tipo diferente. Pair proporciona una forma de almacenar dos objetos heterogéneos como una sola unidad.
  • El par se puede asignar, copiar y comparar. La array de objetos asignados en un mapa o hash_map es de tipo ‘par’ por defecto en el que todos los ‘primeros’ elementos son claves únicas asociadas con sus ‘segundos’ objetos de valor.
  • Para acceder a los elementos, usamos el nombre de la variable seguido del operador de punto seguido de la palabra clave primero o segundo.

¿Cómo acceder a un par?

Podemos acceder a los elementos de un par usando el operador de punto (.) como se explica en el siguiente fragmento,

auto fistElement = myPair.first;
auto fistElement = myPair.second;

¿Qué es un conjunto desordenado?

Un conjunto desordenado es un contenedor asociativo que es similar a un conjunto, pero en el caso de un conjunto desordenado, los elementos no se organizan en ningún orden en particular. Un conjunto desordenado puede contener elementos únicos como un conjunto. Un conjunto no ordenado se implementa utilizando una tabla hash internamente y las claves se convierten en índices de la tabla hash. La inserción en un conjunto desordenado siempre es impredecible o aleatoria. La mayoría de las operaciones en un conjunto desordenado toman un tiempo constante O(1), pero en el peor de los casos, la complejidad del tiempo puede llegar a O(n).

Funciones asociadas al conjunto desordenado:  

  • insert(x) : Inserta un nuevo elemento ‘x’ en el contenedor del conjunto desordenado.
  • begin() : Devuelve un iterador que apunta al primer elemento en el contenedor del conjunto desordenado.
  • end() : Devuelve un iterador que apunta al elemento hipotético al lado del elemento final.
  • count() : cuenta el número de veces que un elemento en particular está presente en un contenedor de conjunto desordenado.
  • erase() : elimine un solo elemento o un rango de elementos que van desde el principio hasta el final (exclusivo).
  • size() : Devuelve el número de elementos en el contenedor del conjunto desordenado.
  • swap() : Intercambia valores de dos contenedores de conjuntos desordenados.
  • max_size() : Devuelve un número máximo de elementos que puede contener un contenedor de conjunto desordenado.
  • vacío() : comprueba si un contenedor de conjunto desordenado está vacío o no.

Un conjunto desordenado de pares puede ser bastante útil al implementar estructuras de datos complejas. Este artículo se centra en cómo podemos crear un conjunto desordenado de pares en C++.

Conjunto desordenado de pares

Un conjunto desordenado de pares es un conjunto desordenado en el que cada elemento es un par en sí mismo. De forma predeterminada, C++ no nos permite crear un conjunto desordenado de pares directamente, pero uno puede pasar una función hash al contenedor del conjunto desordenado. 

Sintaxis:

unordered_set<pair<dataType1, dataType2>, hashFunction> myUnorderedSet;

Aquí,

dataType1: un tipo de datos

dataType2: otro tipo de datos

función hash:

// Función hash
struct hashFunction
    {
        size_t operator()(const pair<int , int> &x) const{
        return x.primero ^ x.segundo;
    }

};

Nota: dataType1 y dataType2 pueden ser similares o diferentes

Ejemplo 1: A continuación se muestra el programa C++ para demostrar el funcionamiento de un conjunto desordenado de pares.

C++

// C++ program to demonstrate 
// the working of unordered set 
// of pairs
#include <bits/stdc++.h>
using namespace std;
  
// Hash function 
struct hashFunction
{
  size_t operator()(const pair<int , 
                    int> &x) const
  {
    return x.first ^ x.second;
  }
};
  
// Function to print unordered set elements
void print(unordered_set<pair<int, int>, 
           hashFunction> &myUnorderedSet)
{ 
  // Iterating over unordered set elements
  for (auto currentPair : myUnorderedSet)
  {
    // Each element is a pair itself
    pair<int, int> pr = currentPair;
  
    cout << "[ ";
  
    // Printing pair elements
    cout << pr.first << "  " << 
            pr.second;
    cout << " ]";
    cout << "\n";
  }
}
  
// Driver code
int main()
{
  // Declaring an unordered set of pairs
  unordered_set<pair<int, int>, 
  hashFunction> myUnorderedSet;
  
  // Initializing pairs of int type
  pair<int, int> pair1;
  pair1 = make_pair(4, 2);
  
  pair<int, int> pair2;
  pair2 = make_pair(2, 3);
  
  pair<int, int> pair3;
  pair3 = make_pair(2, 3);
  
  pair<int, int> pair4;
  pair4 = make_pair(5, 8);
  
  pair<int, int> pair5;
  pair5 = make_pair(9, 5);
  
  
  // Inserting pairs in the unordered set
  myUnorderedSet.insert(pair1);
  myUnorderedSet.insert(pair2);
  myUnorderedSet.insert(pair3);
  myUnorderedSet.insert(pair4);
  myUnorderedSet.insert(pair5);
  
  // Calling print function
  print(myUnorderedSet);
  return 0;
}

Producción:

[ 9 5 ]
[ 5 8 ]
[ 4 2 ]
[ 2 3 ]

Ejemplo 2: A continuación se muestra el programa C++ para demostrar el funcionamiento de un conjunto desordenado de pares.

C++

// C++ program to demonstrate 
// the working of unordered set 
// of pairs
#include <bits/stdc++.h>
using namespace std;
  
// Hash function 
struct hashFunction
{
  size_t operator()(const pair<bool, 
                    bool> &x) const
  {
    return x.first ^ x.second;
  }
};
  
// Function to print unordered set elements
void print(unordered_set<pair<bool, bool>,
           hashFunction> &myUnorderedSet)
{ 
  // Iterating over unordered set elements
  for (auto currentPair : myUnorderedSet)
  {
    // Each element is a pair itself
    pair<bool, bool> pr = currentPair;
  
    cout << "[ ";
  
    // Printing pair elements
    cout << pr.first << "  " << 
            pr.second;
    cout << " ]";
    cout << "\n";
  }
}
  
// Driver code
int main()
{
  // Declaring an unordered set of pairs
  // by passing a hash function as a
  // second argument to the unordered set
  unordered_set<pair<bool, bool>, 
  hashFunction> myUnorderedSet;
  
  // Initializing pairs of bool type
  pair<bool, bool> pair1;
  pair1 = make_pair(0, 0);
  
  pair<bool, bool> pair2;
  pair2 = make_pair(0, 1);
  
  pair<bool, bool> pair3;
  pair3 = make_pair(1, 0);
  
  pair<bool, bool> pair4;
  pair4 = make_pair(1, 1);
  
  pair<bool, bool> pair5;
  pair5 = make_pair(0, 0);
  
  
  // Inserting pairs in the unordered set
  myUnorderedSet.insert(pair1);
  myUnorderedSet.insert(pair2);
  myUnorderedSet.insert(pair3);
  myUnorderedSet.insert(pair4);
  myUnorderedSet.insert(pair5);
  
  // Calling print function
  print(myUnorderedSet);
  return 0;
}

Producción:

[ 1 1 ]
[ 0 0 ]
[ 1 0 ]
[ 0 1 ]

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 *