#include <tpl_linHash.H>
Clases | |
class | Iterator |
Tipos públicos | |
typedef size_t(* | Hash_Fct )(const Key &) |
typedef BucketType< Key > | Bucket |
El tipo de cubeta. | |
typedef Key | Key_Type |
typedef Key | Item_Type |
Métodos públicos | |
void | set_hash_fct (Hash_Fct fct) |
Set the internal hash function. | |
Hash_Fct | get_hash_fct () const |
const Cmp & | get_compare () const |
float | current_alpha () const |
return the current table load | |
GenLinearHashTable (Hash_Fct __hash_fct=Aleph::dft_hash_fct< Key >, const size_t &__len=Primes::DefaultPrime, const float &__lower_alpha=hash_default_lower_alpha, const float &__upper_alpha=hash_default_upper_alpha, const bool __remove_all_buckets=true, const bool __with_resize=true) throw (std::exception, std::length_error, std::domain_error, std::bad_alloc, std::overflow_error) | |
void | swap (GenLinearHashTable &other) |
void | empty () |
Bucket * | search (const Key &key) const |
const size_t & | size () const |
Retorna la cantidad de elementos que tiene la tabla. | |
bool | is_empty () const |
return true is table is empty | |
const size_t & | capacity () const |
Retorna el tamaño de la tabla. | |
const size_t & | busy_slots () const |
Retorna la cantidad de entradas vacía que tiene la tabla. | |
const size_t & | expansions () const |
Bucket * | insert (Bucket *bucket) |
size_t | resize (size_t) |
Provided for generic programming compatibility. | |
Bucket * | remove (Bucket *bucket) |
void | print () |
HASH_STATS () | |
Atributos protegidos | |
Hash_Fct | hash_fct |
float | upper_alpha |
float | lower_alpha |
size_t | len |
Tabla hash lineal genérica.
Básicamente, una tabla hash lineal es una tabla hash con resolución de colisiones por encadenamiento separado pero con la diferencia de que el tamaño de la tabla aumenta dinámicamente para asegurar que el factor de carga, típicamente llamado , esté delimitado entre dos valores inferior y superior, respectivamente.
Internamente, la tabla utiliza un arreglo dinámico del tipo DynArray. Esto conlleva ahorros de memoria por entradas de la tabla que no hayan sido escritas.
Este tipo es genérico y no está destinado a usarse. En su lugar, utilícese LinearHashTable o LinearHashTableVtl según se desee utilizar cubetas sin o con destructor virtual.
Key | el tipo de clave por el cual se indiza la tabla. |
BucketType | el tipo de cubeta entre LinHashBucket o LinHashBucketVtl. |
Cmp | clase de comparación entre las claves. |
typedef size_t(* Aleph::GenLinearHashTable< Key, BucketType, Cmp >::Hash_Fct)(const Key &) |
El tipo de función hash. Debe retornar valores positivos seudo aleatorios, entre cero y el número más grande posible.
|
inline |
Instancia una tabla hash lineal genérica.
Instancia una tabla hash lineal genérica de tamaño __len.
[in] | __hash_fct | función hash. |
[in] | __len | tamaño inicial y mínimo de la tabla. |
[in] | __upper_alpha | umbral superior en que la tabla debe expandirse. |
[in] | __lower_alpha | umbral inferior en que la tabla debe contraerse. |
[in] | __remove_all_buckets | si es true, entonces se liberan las cuvetas de la tabla. De lo contrario, éstas permanecen intactas. Por omisión el valor es true. |
length_error | si __ es igual a superior que la máxima dimensión permitida para un arreglo dinámico. |
domain_error | si __upper_alpha es menor o igual a __lower_alpha. |
bad_alloc | si no hay suficiente memoria |
overflow_error | si ocurre un desborde desde DynArray (causado por sus cálculos internos). |
|
inline |
Vacía toda la tabla. Todas las cubetas son liberadas y el tamaño es ajustado al inicial.
|
inline |
Retorna el nivel de expansiones que se han realizado sobre la tabla.
|
inline |
Insert bucket in the table. Return bucket if bucket->get_key() is not in the table, NULL otherwise
|
inline |
Elimina la cubeta bucket. Atención: no se verifica si la cubeta pertenece a la tabla.
|
inline |
Busca la clave key en la tabla hash lineal. Retorna un puntero a la cubeta que contiene key si ésta se encuentra en la tabla; NULL de lo contrario.