Estructuras de datos basadas en políticas en g ++

El compilador g++ también admite algunas estructuras de datos que no forman parte de la biblioteca estándar de C++. Estas estructuras se denominan estructuras de datos basadas en políticas. Estas estructuras de datos están diseñadas para alto rendimiento, flexibilidad, seguridad semántica y conformidad con los contenedores correspondientes en std.
Para usar estas estructuras, se deben agregar las siguientes líneas al código: 
 

C++

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;

Por ejemplo, el siguiente es un código que muestra una estructura de datos basada en políticas que es como un conjunto, puede agregar/eliminar elementos, puede encontrar la cantidad de elementos menor que x, el késimo elemento más pequeño, etc. en el tiempo O (inicio de sesión). También se puede indexar como una array. La especialidad de este conjunto es que tenemos acceso a los índices que tendrían los elementos en una array ordenada. Si el elemento no aparece en el conjunto, obtenemos la posición que tendría el elemento en el conjunto.
 

C++

// Program showing a policy-based data structure.
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
#include <iostream>
using namespace __gnu_pbds;
using namespace std;
 
// a new data structure defined. Please refer below
// GNU link : https://goo.gl/WVDL6g
typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
 
// Driver code
int main()
{
    ordered_set p;
    p.insert(5);
    p.insert(2);
    p.insert(6);
    p.insert(4);
 
    // value at 3rd index in sorted array.
    cout << "The value at 3rd index ::"
         << *p.find_by_order(3) << endl;
 
    // index of number 6
    cout << "The index of number 6::" << p.order_of_key(6)
         << endl;
 
    // number 7 not in the set but it will show the
    // index number if it was there in sorted array.
    cout << "The index of number seven ::"
         << p.order_of_key(7) << endl;
 
    return 0;
}

Producción: 
 

The value at 3rd index ::6
The index of number 6::3
The index of number seven ::4

NOTA: Tanto las funciones order_of_key como find_by_order funcionan en tiempo logarítmico.

NOTA (PARA USUARIOS DE VENTANA) : Los usuarios de Windows pueden tener problemas para importar la biblioteca pbds. Para solucionarlo sigue los siguientes pasos:

         Paso 1: Vaya al directorio donde está instalado MinGW.

         Paso 2: Vaya a \lib\gcc\mingw32\8.2.0\include\c++\ext\pb_ds\detail\resize_policy

         Paso 3: cambie el nombre de «hash_standard_resize_policy_imp.hpp0000644» a «hash_standard_resize_policy_imp.hpp»

Para insertar múltiples copias del mismo elemento en el conjunto ordenado, reemplace la siguiente línea,

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> conjunto_ordenado;

Con

typedef tree<int , null_type , less_equal<int> , rb_tree_tag , tree_order_statistics_node_update> multiconjunto ordenado

C++

// Program showing a policy-based data structure.
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp>
#include <functional> // for less
#include <iostream>
using namespace __gnu_pbds;
using namespace std;
 
// a new data structure defined. Please refer below
// GNU link : https://goo.gl/WVDL6g
typedef tree<int, null_type, less_equal<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_multiset;
 
// Driver code
int main()
{
    ordered_multiset p;
    p.insert(5);
    p.insert(5);
    p.insert(5);
    p.insert(2);
    p.insert(2);
    p.insert(6);
    p.insert(4);
 
    for (int i = 0; i < (int)p.size(); i++) {
 
        cout << "The element present at the index " << i
             << " is ";
 
        // Print element present at the ith index
        cout << *p.find_by_order(i) << ' ';
        cout << '\n';
    }
 
    return 0;
}
Producción

The element present at the index 0 is 2 
The element present at the index 1 is 2 
The element present at the index 2 is 4 
The element present at the index 3 is 5 
The element present at the index 4 is 5 
The element present at the index 5 is 5 
The element present at the index 6 is 6 

Publicación traducida automáticamente

Artículo escrito por UPENDRA BARTWAL, y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Categories C++

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *