iteradores funciona funcion example ejemplos diccionarios como c++ stl map iterator

example - map c++ como funciona



Funcionalidad de llaves/valores para iteradores en C++ (1)

Sé que esta pregunta ha aparecido en varias formas antes, pero esto es ligeramente diferente.

Tengo una clase que contiene un std :: map. Aunque deseo utilizar el mapa para otros fines dentro de la clase, externamente quiero exponer un adaptador de iterador a solo los valores dentro del mapa (es decir, el segundo elemento en el estándar :: par).

Por ejemplo, en Python podría hacer algo como esto:

def __iter__(self): return self._dict.itervalues()

¿Cómo hago esto en C ++, ocultando la implementación dentro de la clase?

Gracias,

Dan


Eche un vistazo al transform_iterator de Boost que proporciona exactamente este tipo de funcionalidad:

template <typename K, typename V> struct get_value { const V& operator ()(std::pair<K, V> const& p) { return p.second; } }; class your_class { typedef map<int, float> TMap; TMap mymap; public: typedef get_value<TMap::key_type, TMap::data_type> F; typedef boost::transform_iterator<F, TMap::iterator> value_iterator; value_iterator begin() { return make_transform_iterator(mymap.begin(), F()); } value_iterator end() { return make_transform_iterator(mymap.end(), F()); } // TODO Same for const versions. // Rest of the interface … };

Ahora puede iterar sobre los valores, por ejemplo, de esta manera:

your_class c; // Fill c with some values … copy(c.begin(), c.end(), ostream_iterator<float>(cout, " "));