Unordered_multiset ::rehash() es una función incorporada en C++ STL que establece la cantidad de cubos en el contenedor en N o más. Si N es mayor que el número actual de cubos en el contenedor (bucket_count), se fuerza una repetición.
El nuevo recuento de cubos puede ser igual o mayor que N. Si n es menor que el número actual de cubos en el contenedor ( bucket_count ), es posible que la función no tenga efecto en el recuento de cubos y no fuerce una repetición.
Un refrito es la reconstrucción de la tabla hash: todos los elementos del contenedor se reorganizan según su valor hash en el nuevo conjunto de cubos. Esto puede alterar el orden de iteración de los elementos dentro del contenedor, aunque se conserva el orden relativo de los elementos con claves equivalentes. El contenedor realiza automáticamente refritos cada vez que su factor de carga va a superar su max_load_factor en una operación. Al llamar a rehash para reservar una cierta cantidad mínima de cubos en la tabla hash, evitamos los múltiples rehashes que puede causar la expansión del contenedor.
Sintaxis:
unordered_multset_name.rehash(N);
Parámetros: la función acepta solo un parámetro como se indica a continuación:
- count : Es el nuevo número de baldes.
Valor devuelto: ninguno (función de tipo vacío)
Los siguientes programas ilustran el método anterior:
Programa 1:
C++
// C++ program to illustrate // unordered_multiset::rehash() #include <iostream> #include <unordered_set> using namespace std; // function to display values in multiset void display(unordered_multiset<int> s) { for (auto it = s.begin(); it != s.end(); it++) cout << *it << endl; } int main() { // declaration unordered_multiset<int> s1; // inserting initial values s1.insert(1); s1.insert(2); s1.insert(3); // displaying Initial values cout << "Initial values are:\n"; display(s1); cout << endl; // displaying initial parameters cout << "initial parameters are: \n"; cout << "bucketcount() = " << s1.bucket_count() << endl; cout << "load factor = " << s1.load_factor() << endl; cout << "Max_load_factor = " << s1.max_load_factor() << endl; cout << endl; // performing rehash s1.rehash(200); // displaying final parameters cout << "final parameters are: \n"; cout << "bucketcount() = " << s1.bucket_count() << endl; cout << "load factor = " << s1.load_factor() << endl; cout << "Max_load_factor = " << s1.max_load_factor() << endl; cout << endl; return 0; }
Initial values are: 3 1 2 initial parameters are: bucketcount() = 7 load factor = 0.428571 Max_load_factor = 1 final parameters are: bucketcount() = 211 load factor = 0.014218 Max_load_factor = 1
Programa 2:
C++
// C++ program to illustrate // unordered_multiset::rehash() #include <iostream> #include <unordered_set> using namespace std; // function to display values in multiset void display(unordered_multiset<char> s) { for (auto it = s.begin(); it != s.end(); it++) cout << *it << endl; } int main() { // declaration unordered_multiset<char> s1; // inserting initial values s1.insert('a'); s1.insert('b'); s1.insert('c'); // displaying Initial values cout << "Initial values are:\n"; display(s1); cout << endl; // displaying initial parameters cout << "initial parameters are: \n"; cout << "bucketcount() = " << s1.bucket_count() << endl; cout << "load factor = " << s1.load_factor() << endl; cout << "Max_load_factor = " << s1.max_load_factor() << endl; cout << endl; // performing rehash s1.rehash(200); // displaying final parameters cout << "final parameters are: \n"; cout << "bucketcount() = " << s1.bucket_count() << endl; cout << "load factor = " << s1.load_factor() << endl; cout << "Max_load_factor = " << s1.max_load_factor() << endl; cout << endl; return 0; }
Initial values are: c a b initial parameters are: bucketcount() = 7 load factor = 0.428571 Max_load_factor = 1 final parameters are: bucketcount() = 211 load factor = 0.014218 Max_load_factor = 1
Publicación traducida automáticamente
Artículo escrito por Kushagra7744 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA