我用gcc9.2.0和boost 1.55。
我有两个向量:
vector< pair< string, int > > source;
vector< string > dest;
我需要将源向量转换到目标,那应该只包含源向量的字符串元素。
可以使用boost::push_back和适配器访问它吗?
boost::range::push_back( dest, source | ?adaptor? );
目前我有这个可工作的代码,但是应该更改它:
transform( source.begin(), source.end(), back_inserter(dest), __gnu_cxx::select1st< std::pair< std::string, int > >() );
您可以将
#include <algorithm> // transform
#include <iterator> // back_inserter
std::transform(source.begin(), source.end(), std::back_inserter(dest),
[](auto& p) {
return p.first;
});
下面是一个使用
#include <boost/range/adaptor/transformed.hpp>
#include <iostream>
#include <string>
#include <utility>
#include <vector>
using boost::adaptors::transformed;
// define function object (so we can pass it around) emulating std::get
template<std::size_t N>
auto constexpr get = [](auto const& x){ return std::get<N>(x); };
int main()
{
// prepare sample input
std::vector<std::pair<std::string,int>> source{{"one",1},{"two",2},{"three",3}};
// the line you look for
auto dest = source | transformed(get<0>);
// show the result
for (auto const& i : dest) {
std::cout << i << '\n';
}
}