如何将 vector<pair<string, int>> 中的字符串复制到 vector<string>?

Ale*_*ach 5 c++ boost transform vector push-back

我正在使用 GCC 9.2.0 并提升 1.55。

我有两个向量:

vector< pair< string, int > > source;
vector< string > dest;
Run Code Online (Sandbox Code Playgroud)

我需要将source向量转换为dest,这样它应该只包含向量的string元素source

是否可以使用boost::push_back和适配器?

boost::range::push_back( dest, source | /* adaptor ??? */ );
Run Code Online (Sandbox Code Playgroud)

目前我有这个可行的代码,但它应该改变:

transform( source.begin(), source.end(), back_inserter(dest), __gnu_cxx::select1st< std::pair< std::string, int > >() );
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 4

为了继续发布最小改进的趋势:

实时编译器资源管理器

#include <boost/range/adaptor/map.hpp>
#include <fmt/ranges.h>

using namespace std::string_literals;
using namespace boost::adaptors;

template <typename R>
auto to_vector(R const& range) {
    return std::vector(boost::begin(range), boost::end(range));
}

int main() {
    std::vector source {std::pair {"one"s,1},{"two",2},{"three",3}};

    fmt::print("keys {}\nvalues {}\n",
            source | map_keys,
            source | map_values);
    
    // if you really need the vectors
    auto keys   = to_vector(source | map_keys);
    auto values = to_vector(source | map_values);
}
Run Code Online (Sandbox Code Playgroud)

印刷

keys {"one", "two", "three"}
values {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)