
peter_foelsche writes:
or even more clear:
#include <map> #include <set>
typedef std::map<size_t, size_t> CInt2IntMap; typedef std::set<size_t> CIntSet;
static CInt2IntMap convert(const CIntSet &_r) { CInt2IntMap s; for (CIntSet::const_iterator p = _r.begin(); p != _r.end(); ++p) s.insert(std::make_pair(*p, s.size())); return s; }
//required headers #include <cstddef> #include <boost/mpl/placeholders.hpp> #include <boost/mpl/insert.hpp> #include <boost/mpl/inserter.hpp> #include <boost/mpl/size.hpp> #include <boost/mpl/transform.hpp> #include <boost/mpl/pair.hpp> #include <boost/mpl/map.hpp> #include <boost/mpl/range_c.hpp> //test headers #include <boost/mpl/assert.hpp> #include <boost/mpl/equal.hpp> #include <boost/mpl/size_t.hpp> #include <boost/mpl/integral_c.hpp> #include <boost/mpl/vector.hpp> namespace mpl = boost::mpl; template<typename InputSeq> struct convert : mpl::transform< InputSeq, mpl::range_c<std::size_t, 0, mpl::size<InputSeq>::value>, mpl::pair<mpl::_1, mpl::_2>, mpl::inserter< mpl::map<>, mpl::insert<mpl::_1, mpl::_2> >
{ }; typedef mpl::vector< mpl::size_t<4>, mpl::size_t<8>, mpl::size_t<42>
test_input_sequence;
typedef mpl::map< mpl::pair<mpl::size_t<4>, mpl::integral_c<std::size_t, 0> >, mpl::pair<mpl::size_t<8>, mpl::integral_c<std::size_t, 1> >, mpl::pair<mpl::size_t<42>, mpl::integral_c<std::size_t, 2> >
test_expected_result;
BOOST_MPL_ASSERT(( mpl::equal<convert<test_input_sequence>::type, test_expected_result> ));