+#include <map>
+/*!
+ * \brief iterator on values of a map
+ */
+template<typename M>
+struct SMDS_mapIterator : public SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
+ SMDS::ValueAccessor<typename M::mapped_type,
+ typename M::const_iterator> > {
+ typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_iterator,
+ SMDS::ValueAccessor<typename M::mapped_type,
+ typename M::const_iterator> > parent_type;
+ SMDS_mapIterator(const M& m):parent_type(m.begin(),m.end()) {}
+};
+/*!
+ * \brief reverse iterator on values of a map
+ */
+template<typename M>
+struct SMDS_mapReverseIterator : public SMDS_SetIterator< typename M::mapped_type,
+ typename M::const_reverse_iterator,
+ SMDS::ValueAccessor<typename M::mapped_type,
+ typename M::const_reverse_iterator> > {
+ typedef SMDS_SetIterator< typename M::mapped_type, typename M::const_reverse_iterator,
+ SMDS::ValueAccessor<typename M::mapped_type,
+ typename M::const_reverse_iterator> > parent_type;
+ SMDS_mapReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}
+};
+/*!
+ * \brief iterator on keys of a map
+ */
+template<typename M>
+struct SMDS_mapKeyIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+ SMDS::KeyAccessor<typename M::key_type,
+ typename M::const_iterator> > {
+ typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+ SMDS::KeyAccessor<typename M::key_type,
+ typename M::const_iterator> > parent_type;
+ SMDS_mapKeyIterator(const M& m):parent_type(m.begin(),m.end()) {}
+};
+/*!
+ * \brief reverse iterator on keys of a map
+ */
+template<typename M>
+struct SMDS_mapKeyReverseIterator : public SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+ SMDS::KeyAccessor<typename M::key_type,
+ typename M::const_iterator> > {
+ typedef SMDS_SetIterator< typename M::key_type, typename M::const_iterator,
+ SMDS::KeyAccessor<typename M::key_type,
+ typename M::const_iterator> > parent_type;
+ SMDS_mapKeyReverseIterator(const M& m):parent_type(m.rbegin(),m.rend()) {}