Aleph-w  1.9
General library for algorithms and data structures
Aleph::multimap< Key, T, Compare, KTree, TTree > Class Template Reference

#include <Multimap.H>

Classes

class  iterator
 

Public Types

typedef std::pair< Key, T > Pair
 
typedef Pair value_type
 Tipo de valor de clave manejado (que es un par)
 
typedef multimap::value_typereference
 Referencia al par.
 
typedef const multimap::value_typeconst_reference
 
typedef size_t size_type
 
typedef Key key_type
 
typedef T mapped_type
 
typedef const iterator const_iterator
 iterador constante
 

Public Member Functions

void clear ()
 Vacía el multimapeo. Todos los elementos son borrados.
 
const size_t & size () const
 
size_type max_size () const
 
bool empty () const
 
iterator insert (const value_type &value)
 
template<class InputIterator >
void insert (InputIterator first, const InputIterator &last)
 
template<class InputIterator >
 multimap (InputIterator first, const InputIterator &last)
 Construye un multimapeo con los pares del rango [first,last).
 
 multimap (const multimap &m)
 Constructor copia.
 
multimapoperator= (const multimap &m)
 
iterator insert (const_iterator &hint, const value_type &value)
 
iterator erase (const_iterator &position)
 Elimina del multimapeo el elemento situado en position.
 
size_type erase (const key_type &key)
 
iterator erase (iterator first, const_iterator &last)
 
iterator begin () const
 retorna un iterador al primer elemento del multimapeo.
 
iterator end () const
 retorna un iterador al último elemento del multimapeo.
 
size_type count (const Key &key) const
 retorna la cantidad pares con clave igual a key
 
iterator find (const Key &key) const
 
iterator lower_bound (const Key &key) const
 Retorna un iterador posicionado en el lugar donde sería insertado key.
 
iterator upper_bound (const Key &key) const
 
std::pair< iterator, iteratorequal_range (const Key &key) const
 
void swap (multimap &other)
 Intercambia los valores de this con los de other.
 
bool operator< (const multimap &rhs) const
 
bool operator<= (const multimap &rhs) const
 
bool operator== (const multimap &rhs) const
 Retorna true si this es exactamente igual a rhs.
 
bool operator!= (const multimap &rhs) const
 Retorna true si this es distinto de rhs.
 
bool operator> (const multimap &rhs) const
 
bool operator>= (const multimap &rhs) const
 
const T & operator[] (const Key &key)
 
const T & operator[] (const Key &key) const
 

Detailed Description

template<typename Key, typename T, class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
class Aleph::multimap< Key, T, Compare, KTree, TTree >

Implementación Aleph del tipo estándar multimap<Key,T> basada en árboles binarios de búsqueda con rangos.

Esta es una implantación parcial, aunque bastante avanzada y de posible mejor rendimiento, de la clase estándar C++ multimap<Key,T>.

La implementación está basada en árboles binarios de búsqueda con rango. Por omisión, se emplean treaps con tango, pero podrían emplearse otros tipos de árboles binarios de búsqueda siempre y cuando respeten la interfaz.

Una diferencia de esta implementación con el estándar es que el tipo de árbol es un parámetro. En Aleph los árboles binarios de búsqueda con rango (BinNodeXt), treaps (Treap_Rk) y los árboles aleatorizados (Rand_tree) pueden emplearse para implementar esta clase.

Otra diferencia con el estándar, quizá la más importante, es que los pares del mapeo que repitan la clave primaria están ordenados entre sí. Esto exige la presencia del operador < para el tipo T. Del mismo modo, viola la normativa del estándar de que los pares de clave primaria repetida estén ordenados según su orden de inserción.

La implementación emplea un árbol binario de búsqueda con rangos para indizar las claves primarias de tipo Key. Cada nodo de este árbol contiene otro árbol binario de búsqueda con rangos que contiene las claves asociadas. Cada nodo, en ambos tipos de árboles, maneja un contador de repeticiones. Así, por ejemplo, para los pares (1,0),(1,0),(1,0),(1,0),(1,5),(1,5),(1,5) se usa un solo nodo KTree con clave 1 y dos nodos TTree con claves 0 y 1 respectivamente. Este estilo de implantación ahorra mucho espacio si en efecto, tendría sentido esperar, el multimapeo contiene muchas duplicidades.

Este estilo de implantación tiende a ser más veloz que otros esquemas tradicionales. Especialmente, el avance de los iteradores.

Nótese también que en el caso de no contener muchas duplicidades esta implementación consume prácticamente el mismo espacio que una basada en árboles más listas enlazadas de repitencias (que es el usado por la mayoría de las instrumentaciones del estándar).

Parameters
Keyel tipo de clave primaria
Tel tipo de dato que asociará a una clave primaria.
Compareel criterio de comparación entre los elementos de tipo T. Por omisión se implanta Key::operator<(const T&).
KTreela clase de árbol binario de búsqueda con rangos conque se indizan las claves primarias de tipo Key.
TTreela clase de árbol binario de búsqueda con rangos conque se indizan las claves asociadas.
See also
BinNodeXt Treap_Rk Rand_Tree set map multiset
Author
Leandro Rabindranath León

Member Function Documentation

◆ empty()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
bool Aleph::multimap< Key, T, Compare, KTree, TTree >::empty ( ) const
inline

Retorna true si el multimapeo está vacío (no contiene ningún elemento).

◆ equal_range()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
std::pair<iterator,iterator> Aleph::multimap< Key, T, Compare, KTree, TTree >::equal_range ( const Key &  key) const
inline

Retorna un par de iteradores que definen el rango completo de claves con valor key que están contenidas en el multimapeo.

+ Here is the call graph for this function:

◆ erase() [1/2]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
size_type Aleph::multimap< Key, T, Compare, KTree, TTree >::erase ( const key_type &  key)
inline

Elimina todos los pares con clave key. Retorna la cantidad de pares eliminados.

+ Here is the call graph for this function:

◆ erase() [2/2]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
iterator Aleph::multimap< Key, T, Compare, KTree, TTree >::erase ( iterator  first,
const_iterator last 
)
inline

Elimina todos los pares comprendidos en el rango [first,last).

Parameters
[in]firstposition del primer elemento a eliminar.
[in]lastposición al elemento sucesor del último elemento a eliminar.
Returns
iterador al el elemento sucesor del último eliminado (debe corresponderse con last).
Todo:
Aprovechar salto interclaves dados por los contadores de repitencias.
+ Here is the call graph for this function:

◆ find()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
iterator Aleph::multimap< Key, T, Compare, KTree, TTree >::find ( const Key &  key) const
inline

Retorna un iterador posicionado sobre el primer par con clave key; end() de lo contrario.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ insert() [1/3]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
iterator Aleph::multimap< Key, T, Compare, KTree, TTree >::insert ( const value_type value)
inline

Inserta en el multimapeo los elementos contenidos en el rango [first,last).

Esta inserción toma $\lg n$; donde n es la cantidad de claves distintas de tipo Key que contiene el multimapeo.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ insert() [2/3]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
template<class InputIterator >
void Aleph::multimap< Key, T, Compare, KTree, TTree >::insert ( InputIterator  first,
const InputIterator &  last 
)
inline

Inserta en el multimapeo los elementos contenidos en el rango [first,last).

+ Here is the call graph for this function:

◆ insert() [3/3]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
iterator Aleph::multimap< Key, T, Compare, KTree, TTree >::insert ( const_iterator hint,
const value_type value 
)
inline

Inserción "ayudada" de posición.

Esta versión de insert() aprovecha la posición del iterador hint para efectuar una inserción más rápida que la tradicional.

Si hint->first == value.first según el criterio de comparación, entonces esta inserción consume $\lg m$; donde m es la cantidad de repeticiones distintas de la clave secundaria asociada a hint->first o value.first. De lo contrario se efectúa la inserción tradicional.

Parameters
[in]hintiterador de "ayuda"
[in]valuepar a insertar
Returns
un iterador apuntando a una copia del par recién insertado.
Exceptions
bad_allocsi no hay suficiente memoria.
+ Here is the call graph for this function:

◆ max_size()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
size_type Aleph::multimap< Key, T, Compare, KTree, TTree >::max_size ( ) const
inline

Retorna un estimado sobre la máxima cantidad de elementos que puede albergar el multimapeo

◆ operator<()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
bool Aleph::multimap< Key, T, Compare, KTree, TTree >::operator< ( const multimap< Key, T, Compare, KTree, TTree > &  rhs) const
inline

Retorna true si this es menor que rhs según la comparación lexicográfica.

See also
lexicographical_compare
+ Here is the call graph for this function:

◆ operator<=()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
bool Aleph::multimap< Key, T, Compare, KTree, TTree >::operator<= ( const multimap< Key, T, Compare, KTree, TTree > &  rhs) const
inline

Retorna true si this es menor o igual que rhs según la comparación lexicográfica.

See also
lexicographical_compare
+ Here is the call graph for this function:

◆ operator=()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
multimap& Aleph::multimap< Key, T, Compare, KTree, TTree >::operator= ( const multimap< Key, T, Compare, KTree, TTree > &  m)
inline

Asignación. Todos los elementos del lado izquierdo son liberados.

+ Here is the call graph for this function:

◆ operator>()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
bool Aleph::multimap< Key, T, Compare, KTree, TTree >::operator> ( const multimap< Key, T, Compare, KTree, TTree > &  rhs) const
inline

Retorna true si this es menor que rhs según la comparación lexicográfica.

See also
lexicographical_compare

◆ operator>=()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
bool Aleph::multimap< Key, T, Compare, KTree, TTree >::operator>= ( const multimap< Key, T, Compare, KTree, TTree > &  rhs) const
inline

Retorna true si this es mayor o igual que rhs según la comparación lexicográfica.

See also
lexicographical_compare

◆ operator[]() [1/2]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
const T& Aleph::multimap< Key, T, Compare, KTree, TTree >::operator[] ( const Key &  key)
inline

Acceso como arreglo.

El operador [] puede emplearse para escribir y leer datos en el multimapeo.

Si m es un mapeo, entonces m[key] = item; insertará el par (key,item).

La expresión cout << m[key] "lee" el item asociado a la clave key. Si la clave ya existe, entonces se retorna el primer item asociado. De lo contrario, se inserta un nuevo par cuyo valor de item está inicializado por el constructor T::T().

+ Here is the call graph for this function:

◆ operator[]() [2/2]

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
const T& Aleph::multimap< Key, T, Compare, KTree, TTree >::operator[] ( const Key &  key) const
inline

Acceso como arreglo constante. Si la clave no está insertada entonces se dispara excepción.

+ Here is the call graph for this function:

◆ size()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
const size_t& Aleph::multimap< Key, T, Compare, KTree, TTree >::size ( ) const
inline

Retorna la cantidad de elementos que contiene el multimapeo (cantidad total de pares).

+ Here is the caller graph for this function:

◆ upper_bound()

template<typename Key , typename T , class Compare = Aleph::less<Key>, template< class, class > class KTree = Treap_Rk, template< class, class > class TTree = Treap_Rk>
iterator Aleph::multimap< Key, T, Compare, KTree, TTree >::upper_bound ( const Key &  key) const
inline

Retorna un iterador posicionado en el lugar sucesor de key si key fuese insertado.

+ Here is the call graph for this function:

The documentation for this class was generated from the following file:

Leandro Rabindranath León