В STL вам потребуется алгоритм transform_if.Тогда вам нужно было бы написать:
transform_if (mymap.begin(), mymap.end(),
back_inserter(myvec),
bind(&std::map<First, Second>::value_type::second, _1) ,
(bind(&std::map<First, Second>::value_type::first, _1) % 2) == 0 );
Код для transform_if взят из этого несвязанного вопроса и он:
template<class InputIterator, class OutputIterator, class UnaryFunction, class Predicate>
OutputIterator transform_if(InputIterator first,
InputIterator last,
OutputIterator result,
UnaryFunction f,
Predicate pred)
{
for (; first != last; ++first)
{
if( pred(*first) )
*result++ = f(*first);
}
return result;
}
Я думаю, что нетдругой способ выполнить оба шага (преобразование и условное копирование) одновременно, используя алгоритмы STL.