当前位置: 首页 > 知识库问答 >
问题:

将VectorPair>>复制到VectorString>

章烨烨
2023-03-14

我用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 > >() );

共有2个答案

龚凌
2023-03-14

下面是一个使用 适配器的增强解决方案:

#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';
    }
}
卢磊
2023-03-14

您可以将 与lambda一起使用:

#include <algorithm> // transform
#include <iterator>  // back_inserter

std::transform(source.begin(), source.end(), std::back_inserter(dest),
               [](auto& p) {
                   return p.first;
               });
 类似资料:
  • 我有一个这样的数据帧。 现在,我想将第1列中的dict扩展到如下所示的各个列。 有没有捷径可以实现这一点?

  • 我想将文件salesjan2009.csv(存储在本地文件系统中,~/input/salesjan2009.csv)复制到HDFS(Hadoop分布式文件系统)主目录中 我编写了这段代码hduser@ubuntu:/usr/local/hadoop$hdfs dfs-copyfromlocal'/home/hduser/desktop/input/salesjan2009.csv'/hdfs-pa

  • 问题内容: 如何将BufferedImage存储到系统剪贴板中? 问题答案: 这是从这里获得的工作代码,已成功测试

  • 问题内容: 首先,关于SO将图像复制到python中的剪贴板的问题导致答案用PIL和win32clipboard将图像写入python中的Windows剪贴板?,这仅对Python 2.x有用。-我尝试过,但是没有用。我克服了一个问题:Python 3.0中没有StringIO和cStringIO模块 ,但是碰到了另一个: 因此,对于Python 3再次提出相同的问题-如何在Python 3中将图

  • 我想知道是否有任何指令序列不使用任何其他寄存器来复制RAX的低32位到其高32位。当然,我也希望EAX完好无损。 最好也不使用任何堆栈存储器。

  • 问题内容: 我想及时重定向过程的输出。如果我等待过程完成,我可以这样做: 但是,如果该过程花费很长时间或没有完成,则将没有太大用处。我知道我可以像这样实时写入stdout: 但是,这实际上并没有帮助我,因为我正在编写未写入终端的服务。我正在寻找可以让我做类似的事情: 不能直接访问其作者,因此这是不可能的。当然,我不是唯一遇到这个问题的人,这通常是怎么做的? 问题答案: 您应该在此处使用管道,例如: