我一直在尝试从地图中填充矢量。我知道如何以更传统的方式做到这一点,但我试图用 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() 解决方案!