Q1: Is there a builtin in way in MI to iterate over keys rather than elements? I.e. the iterator's value type will be that of the key, not the element. Q2: Is there a way to obtain the type of key extractors given a multi index container? (it is related to Q1, as this sort of a thing could be passed to boost::transform iterator to obtain an alternative answer for Q1) An example is in order: struct Foo { int id; sting name; }; using namespace boost::multi_index; typedef multi_index_container< Foo, indexed_by< ordered_unique< member< Foo, int, &Foo::id > >, ordered_unique< member< Foo, string, &Foo::name > >
MFoo;
MFoo foos; // .. populate // Now, we want to iterate over sorted name's only, for e.g: auto beg = answer_to_Q1(foos).begin(); auto end = answer_to_Q1(foos).end(); std::copy( beg, end, ostream_iterator<string>(cout, " ") ); // Continuing the example for Q2: auto aFunctorThatExtractsFooName = answer_to_Q2<M>::type(); auto beg = make_transform_iterator( M.get<1>.cbegin(), aFunctorThatExtractsFooName ); auto end = make_transform_iterator( M.get<1>.cend(), aFunctorThatExtractsFooName ); std::copy( beg, end, ostream_iterator<string>(cout, " ") ); Thanks! Nick