マップからベクトルを埋めようとしています。私はこれをより従来の方法で行う方法を知っていますが、ある種のトレーニングとしてSTLアルゴリズム(ワンライナー)でそれを達成しようとしていました:)。
元のマップ タイプは次のとおりです。
std::map< std::string, boost::shared_ptr< Element > >
宛先ベクトルは次のとおりです。
std::vector< Element > theVector;
私がこれまでに持っているのはこれです:
std::transform( theMap.begin(), theMap.end(),
std::back_inserter( theVector ),
boost::bind( &map_type::value_type::second_type::get, _1 )
);
しかし、これは機能しないベクトルにポインターを挿入しようとしています。私もこれを試しました:
using namespace boost::lambda;
using boost::lambda::_1;
std::transform( theMap.begin(), theMap.end(),
std::back_inserter( theVector ),
boost::bind( &map_type::value_type::second_type::get, *_1 )
);
しかし、それも機能していません。
編集:
私はこの実用的な解決策を持っていますが、あまり印象的ではありません:)
std::for_each( theMap.begin(), theMap.end(),
[&](map_type::value_type& pair)
{
theVector.push_back( *pair.second );
} );
Edit2: ここで私があまり慣れていないのは bind() です。したがって、bind() ソリューションは大歓迎です!