¿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 ]