3 #ifndef __INDICEMAGICO__
4 #define __INDICEMAGICO__
6 #define MAX_ELEMENTOS 500
19 std::vector< std::string > m_nombres ;
20 std::vector< T > m_datos ;
21 typedef typename std::vector< T >::iterator iterator;
25 iterator begin() { return m_datos.begin(); }
27 iterator end() { return m_datos.end(); }
29 void add(const std::string& nombre, const T& dato)
31 //Si ya existía, lo borro
35 m_nombres.push_back(nombre);
36 m_datos.push_back(dato);
40 void add(CIndiceMagico<T>& indice)
42 for (unsigned i = 0; i < indice.m_nombres.size(); ++i)
43 add(indice.m_nombres[i], indice.m_datos[i]) ;
47 bool exist(const std::string& nombre)
49 for (unsigned i = 0; i < m_nombres.size(); ++i)
50 if (m_nombres[i]==nombre)
56 //PRE: Existe un elemento con la clave <nombre>.
57 //POS: Retorna el elemento.
58 T& find(const std::string& nombre)
61 for (i = 0; i < m_nombres.size() && m_nombres[i] != nombre; ++i);
66 void set_val(const std::string& nombre, const T& valor)
68 for (unsigned i = 0; i < m_nombres.size(); ++i)
70 if (m_nombres[i] == nombre)
86 void remove(unsigned long index)
88 m_nombres.erase(m_nombres.begin() + index);
89 m_datos.erase(m_datos.begin() + index);
92 void remove(const std::string& nombre)
97 for (i = 0; !exito && i < m_nombres.size(); ++i)
98 exito = m_nombres[i]==nombre;
105 T& operator [] (unsigned i) { return m_datos[i]; }
107 T& items (unsigned i) { return m_datos[i]; }
109 std::string keys (unsigned i) const { return m_nombres[i]; }
111 unsigned count() { return m_nombres.size(); }
115 template < typename T >
116 std::ostream& operator<< (std::ostream& os, CIndiceMagico<T>& im)
118 unsigned c = im.count();
119 if (c == 0) return os << "\t\tvacío\n";
120 for (unsigned i = 0; i < c; ++i)
121 os << "\t\t" << im.keys(i) << ":\t" << im[i] << "\n";
125 template < typename T >
126 std::ostream& operator<< (std::ostream& os, CIndiceMagico<T*>& im)
128 unsigned c = im.count();
129 if (c == 0) return os << "\t\tvacío\n";
130 for (unsigned i = 0; i < c; ++i)
131 os << "\t\t" << im.keys(i) << ":\t" << *im[i] << "\n";