3 #ifndef __INDICEMAGICO__
4 #define __INDICEMAGICO__
6 #define MAX_ELEMENTOS 500
13 #include <iostream> // FIXME
20 std::vector< std::string > m_nombres ;
21 std::vector< T > m_datos ;
22 typedef typename std::vector< T >::iterator iterator;
26 iterator begin() { return m_datos.begin(); }
28 iterator end() { return m_datos.end(); }
30 void add(const std::string& nombre, const T& dato)
32 //Si ya existía, lo borro
36 m_nombres.push_back(nombre);
37 m_datos.push_back(dato);
41 void add(CIndiceMagico<T>& indice)
43 for (unsigned i = 0; i < indice.m_nombres.size(); ++i)
45 add(indice.m_nombres[i], indice.m_datos[i]) ;
50 bool exist(const std::string& nombre)
52 for (unsigned i = 0; i < m_nombres.size(); ++i)
53 if (m_nombres[i]==nombre)
59 //PRE: Existe un elemento con la clave <nombre>.
60 //POS: Retorna el elemento.
61 T& find(const std::string& nombre)
64 for (i = 0; i < m_nombres.size() && m_nombres[i] != nombre; ++i);
69 void set_val(const std::string& nombre, const T& valor)
71 for (unsigned i = 0; i < m_nombres.size(); ++i)
73 if (m_nombres[i] == nombre)
89 void remove(unsigned long index)
91 m_nombres.erase(m_nombres.begin() + index);
92 m_datos.erase(m_datos.begin() + index);
95 void remove(const std::string& nombre)
97 for (unsigned i = 0; i < m_nombres.size(); ++i)
98 if (m_nombres[i]==nombre)
106 T& operator [] (unsigned i) { return m_datos[i]; }
108 T& items (unsigned i) { return m_datos[i]; }
110 std::string keys (unsigned i) const { return m_nombres[i]; }
112 unsigned count() { return m_nombres.size(); }
116 template < typename T >
118 std::ostream& operator<< (std::ostream& os, CIndiceMagico<T>& im)
120 unsigned c = im.count();
122 if (c-- == 0) return os << "";
123 for (unsigned i = 0; i < c; ++i)
128 if (c == 0) return os << "\t\tvacío\n";
129 for (unsigned i = 0; i < c; ++i)
130 os << "\t\t" << im.keys(i) << ":\t" << im[i] << "\n";
135 template < typename T >
137 std::ostream& operator<< (std::ostream& os, CIndiceMagico<T*>& im)
139 unsigned c = im.count();
141 if (c-- == 0) return os << "";
142 for (unsigned i = 0; i < c; ++i)
147 if (c == 0) return os << "\t\tvacío\n";
148 for (unsigned i = 0; i < c; ++i)
149 os << "\t\t" << im.keys(i) << ":\t" << *im[i] << "\n";