00001
00010 #ifndef _Diccionario_h
00011 #define _Diccionario_h
00012
00013 #include <cassert>
00014 #include <utilidades.h>
00044 template <class Tk,class Ti>
00045 class Diccionario {
00046 private:
00069 Par<Tk,Ti> * parejas;
00070 int nelementos;
00071 int reservados;
00081 bool posicion_indice(int& pos, const Tk& llave) const;
00088 void expandir();
00096 void contraer();
00097 public:
00098
00112 class const_iterador {
00113 private:
00114 Par<Tk,Ti>* puntero;
00115 const_iterador(Par<Tk,Ti>* p): puntero(p) {}
00116 public:
00117 const_iterador(): puntero(0) {}
00118 const_iterador(const const_iterador& it): puntero(it.puntero){}
00119
00120 const Par<Tk,Ti>& operator*() const
00121 { assert(puntero!=0);return *puntero; }
00122 const_iterador& operator++() {
00123 assert(puntero!=0);puntero++;return *this;}
00124 const_iterador& operator--() {
00125 assert(puntero!=0);puntero--;return *this;}
00126 bool operator!=(const const_iterador& v) const{
00127 return puntero!=v.puntero; }
00128 bool operator==(const const_iterador& v) const{
00129 return puntero==v.puntero; }
00130 friend class Diccionario<Tk,Ti>;
00131 };
00132 const_iterador begin() const {return const_iterador(parejas);}
00133 const_iterador end() const {return const_iterador(parejas+nelementos);}
00142 typedef const_iterador iterador;
00143
00144
00145 Diccionario<Tk,Ti>();
00146 Diccionario<Tk,Ti>(const Diccionario<Tk,Ti>& orig);
00147 ~Diccionario<Tk,Ti>();
00148 Diccionario<Tk,Ti>& operator= (const Diccionario<Tk,Ti>& original);
00156 void insertar(const Tk& llave, const Ti& valor);
00164 iterador borrar(iterador it);
00171 iterador buscar(const Tk& llave);
00176 int num_elementos() const { return nelementos; }
00177
00178 };
00179
00180 #include <diccionario.cpp>
00181
00182 #endif