|
void | swap (DynSetTree &dset) |
|
| DynSetTree (Compare &&cmp=Compare()) |
| Instancia un conjunto dinámico vacío.
|
|
| DynSetTree (Compare &cmp) |
|
| DynSetTree (const DynSetTree &srcTree) |
| Instancia un conjunto dinámico copia de srcTree.
|
|
| DynSetTree (const DynList< Key > &list) |
|
| DynSetTree (DynSetTree &&srcTree) |
|
void | empty () |
| Elimina todos los elementos del conjunto.
|
|
DynSetTree & | operator= (const DynList< Key > &list) |
|
DynSetTree & | operator= (const DynSetTree &srcTree) |
| Asigna a this el conjunto dinámico srcTree.
|
|
DynSetTree & | operator= (DynSetTree &&srcTree) |
| Asigna a this el conjunto dinámico srcTree.
|
|
virtual | ~DynSetTree () |
| Destructor; todos los elementos son liberados.
|
|
Key * | insert (const Key &key) |
|
Key * | insert (Key &&key) |
|
Key * | append (const Key &key) |
|
Key * | append (Key &&key) |
|
Key * | search_or_insert (const Key &key) |
|
Key * | search_or_insert (Key &&key) |
|
Key * | insert_dup (const Key &key) |
|
Key * | insert_dup (Key &&key) |
|
Key * | put (const Key &key) |
| Seudo sinonimo de insert; no retorna ningún valor.
|
|
Key * | put (Key &&key) |
|
size_t | remove (const Key &key) |
|
bool | exist (const Key &key) const |
| Retorna true si key pertenece al conjunto dinámico.
|
|
bool | has (const Key &key) const |
|
bool | contains (const Key &key) const |
|
Key & | find (const Key &key) throw (std::exception, std::domain_error) |
|
std::pair< int, Key * > | find_position (const Key &key) const |
|
Key * | search (const Key &key) const throw (std::exception, std::domain_error) |
|
const Key & | min () const |
|
const Key & | get_first () |
|
const Key & | max () const |
|
const Key & | get_last () |
|
const Key & | get () |
| Sinónimo de max.
|
|
const size_t & | size () const |
| Retorna la cardinalidad del conjunto.
|
|
bool | is_empty () const |
| Retorna true si el conjunto está vacío.
|
|
size_t | internal_path_length () const |
|
Node * | get_root_node () const |
|
const Key & | get_root () const |
|
size_t | height () const |
| Calcula y retorna la altura del árbol binario de búsqueda.
|
|
template<class Op > |
void | for_each_in_preorder (void(*visitFct)(Node *, int, int)) |
|
long | position (const Key &key) const |
|
Key & | select (const size_t &i) |
|
const Key & | select (const size_t &i) const |
|
Key & | operator() (const size_t &i) |
|
Key & | access (const size_t &i) |
|
bool | verify () |
|
template<class Key_Op > |
void | for_each_preorder (Key_Op &key_op) |
|
template<class Key_Op > |
void | for_each_preorder (Key_Op &&key_op=Key_Op()) |
|
template<class Key_Op > |
void | for_each_inorder (Key_Op &key_op) |
|
template<class Key_Op > |
void | for_each_inorder (Key_Op &&key_op=Key_Op()) |
|
template<class Key_Op > |
void | for_each_postorder (Key_Op &key_op) |
|
template<class Key_Op > |
void | for_each_postorder (Key_Op &&key_op=Key_Op()) |
|
DynSetTree & | join (DynSetTree &t, DynSetTree &dup) |
|
DynSetTree & | join (DynSetTree &t, DynSetTree &&dup=DynSetTree()) |
|
DynSetTree & | join_dup (DynSetTree &t) |
|
bool | split_key (const Key &key, DynSetTree &l, DynSetTree &r) |
|
void | split_pos (const size_t pos, DynSetTree &l, DynSetTree &r) |
|
void | split_key_dup (const Key &key, DynSetTree &l, DynSetTree &r) |
|
template<class Operation > |
bool | traverse (Operation &op) |
|
template<class Operation > |
bool | traverse (Operation &&op=Operation()) |
|
template<class Operation > |
bool | traverse (Operation &op) const |
|
template<class Operation > |
bool | traverse (Operation &&op=Operation()) const |
|
| Functional_Methods (Key) |
|
| Generic_Keys (Key) |
|
| Equal_To_Method (DynSetTree) |
|
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
class Aleph::DynSetTree< Key, Tree, Compare >
Conjunto dinámico de elementos de tipo genérico T implementado mediante una clase de árboles binarios.
DynSetTree define una tabla de elementos de tipo Key que está instrumentada con la clase de árbol binario de búsqueda Tree<Key> y ordenado mediante el criterio Compare()().
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Key& Aleph::DynSetTree< Key, Tree, Compare >::find |
( |
const Key & |
key | ) |
|
throw | ( | std::exception, |
| | std::domain_error |
| ) | | |
|
inline |
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
std::pair<int, Key*> Aleph::DynSetTree< Key, Tree, Compare >::find_position |
( |
const Key & |
key | ) |
const |
|
inline |
Retorna la posición infija (ordenada) de la clave key o lo que seria su posición de pertenecer al árbol.
find_position(key) busca en el árbol extendido la clave key (lo cual toma tiempo ) y retorna la posición infija del nodo que contiene la clave.
- Parámetros
-
[in] | key | clave a buscar y a determinar posición infija. |
- Devuelve
- posición infija de la clave key dentro del conjunto ordenado si ésta se encuentra o, de lo contrario, la posición donde se encontraría de pertenecer al árbol.
- Atención
- Sólo funciona si el árbol maneja rangos.
Referenciado por Aleph::DynSetTree< Key, Tree, Compare >::Iterator::set_key().
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Retorna la posición infija (ordenada) de la clave key.
position(key) busca en el treap extendido la clave key (lo cual toma tiempo ) y retorna la posición infija del nodo que contiene la clave.
- Parámetros
-
[in] | key | clave a buscar y a determinar posición infija. |
- Devuelve
- posición infija de la clave key dentro del conjunto ordenado si la clave se encuentra; -1 de lo contrario
- Atención
- Sólo funciona si el árbol maneja rangos.
Referenciado por Aleph::DynSetTree< Key, Tree, Compare >::Iterator::reset_to_key().
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Key* Aleph::DynSetTree< Key, Tree, Compare >::search |
( |
const Key & |
key | ) |
const |
throw | ( | std::exception, |
| | std::domain_error |
| ) | | |
|
inline |
Busca un elemento en el conjunto.
search(key) busca la clave key en el conjunto. Si el elemento se encuentra en el conjunto, entonces se retorna un puntero al valor contenido en el conjunto; de lo contrario se retrona NULL.
- Parámetros
-
- Devuelve
- puntero al elemento en en el conjunto si éste se encuentra en el mismo; NULL de l contrario.
- Nota
- Téngase sumo cuidado con alterar el orden de búsqueda, pues a través del puntero la clave es modificable.
Referenciado por Aleph::DynSetTree< GT::Arc *, Tree, Compare >::exist(), Aleph::IndexArc< GT, Tree >::search(), Aleph::IndexNode< GT, Compare, Tree >::search(), Aleph::DynMapTree< string, Huffman_Node *, Treap_Vtl >::search(), Aleph::Arcs_Index< GT, Compare, Tree, SA >::search() y Aleph::DynMapTree< string, Huffman_Node *, Treap_Vtl >::test().
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Busca la clave key
en el árbol binario de búsqueda o lo inserta en caso de no encontrarse.
search_or_insert(key)
busca en el árbol binario un nodo cuya clave sea KEY(p)
. Si la clave se encuentra, entonces se retorna un puntero a ella; de lo contrario se inserta key
en el árbol binario de búsqueda this.
- Parámetros
-
[in] | key | la clave a buscar o insertar. |
- Devuelve
- puntero a la clave dentro del árbol
Referenciado por Aleph::DynMapTree< string, Huffman_Node *, Treap_Vtl >::search_or_insert().
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Particiona el árbol binario de búsqueda según una clave.
split_key(key,l,r) particiona, según la clave key, el árbol binario de búsqueda this en dos árboles l y r. Luego de la operación el árbol this deviene vacío, l contiene todas las claves menores que key y r las mayores.
- Parámetros
-
[in] | key | clave de partición. |
[out] | l | árbol con las claves menores que key. |
[out] | r | árbol con las claves mayores que key. |
- Devuelve
- true si key no está dentro del árbol binario; en cuyo caso la partición fue hecha exitosamente. De lo contrario, si key se encuentra dentro del árbol, el árbol no se particiona y el resultado es false.
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Particiona el árbol binario de búsqueda según una clave que puede estar presente en el árbol.
split_dup(key,l,r) particiona, según la clave key, el árbol binario de búsqueda this en dos árboles l y r. Luego de la operación el árbol this deviene vacío, l contiene todas las claves menores que key y r las mayores o iguales.
- Parámetros
-
[in] | key | clave de partición. |
[out] | l | árbol con las claves menores que key. |
[out] | r | árbol con las claves mayores o iguales que key. |
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
Particiona el árbol binario de búsqueda según una posición infija.
split_pos(pos,l,r) particiona árbol binario de búsqueda this en dos árboles l y r. Luego de la operación el árbol this deviene vacío, l contiene las pos primeras claves y r las restantes.
- Parámetros
-
[in] | pos | posición de partición |
[out] | l | árbol con las claves entre intervalo [0,pos] |
[out] | r | árbol con las claves en el intervalo (pos,N), donde N es el número de claves |
template<typename Key, template< typename, class > class Tree = Avl_Tree, class Compare = Aleph::less<Key>>
template<class Operation >
Traverse all the set of pairs and for eah pair executes operation.
Operation must have the signature
If
returns false then the traversal is aborted; otherwise the the routine advance and so on
- Parámetros
-
- Devuelve
- true if all items are traversed; false otherwise