c++ - 初始化一对 vector 并转换它们

标签 c++ c++11 stdvector std-pair

我想在我的变换函数中使用一对 vector 而不是两个 vector ,但不知道如何在 make_pair 中初始化这两个 vector > 功能。

我有以下代码并且工作正常:

vector<Point> group_pts(size);
vector<int> group_rs(size);

std::transform(group.begin(), group.end(), group_pts.begin(), 
         [](const Circle& c1) -> Point { return c1.p;    } );
std::transform(group.begin(), group.end(), group_rs.begin(), 
         [](const Circle& c1) -> int { return c1.radius; } );
std::pair < vector<Point>, vector<int> > group_dscrp = make_pair(group_pts, group_rs);
return group_dscrp;

但是,我需要这样的东西,但不知道应该如何初始化

std::pair < vector<Point>, vector<int> > group_dscrp = INIT;

std::transform(group.begin(), group.end(), group_dscrp.first.begin(), 
              [](const Circle& c1) -> Point { return c1.p; } );

std::transform(group.begin(), group.end(), group_dscrp.second.begin(), 
              [](const Circle& c1) -> int {   return c1.radius; } );

return group_dscrp;

最佳答案

您的问题的答案已在评论中提及(来自@MatthieuBrucher)。

std::pair<vector<Point>, vector<int>> group_dscrp{size, size}

将初始化这对 vector 。

但是,如果您需要一个数据结构来保存 CirclePointradius 成员,您可能需要重新考虑(如@WhozCraig 提到)

std::vector<std::pair<Point, int>> group_dscrp

现在您可以再次使用 std::transform

std::transform(group.cbegin(), group.cend(), std::back_inserter(group_dscrp), 
    [](const Circle& circle) {return std::pair<Point, int>{ circle.p, circle.radius };  });

或者使用一个简单的基于范围的循环插入到 group_dscrp 中,如下所示:

std::vector<Circle> group;
std::vector<std::pair<Point, int>> group_dscrp;
group_dscrp.reserve(size);
for (const Circle& circle : group) group_dscrp.emplace_back(circle.p, circle.radius);

关于c++ - 初始化一对 vector 并转换它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683913/

相关文章:

c++ - 使用 Eigen 库存储 3D 数据

java - JNA 中的 typedef 结构指针

android - 如何在 Android 上用 Qt 或 C++ 重新启动程序?

c++ - 使用基本指针迭代 std::map 的一种派生类型

C++11多读一写线程互斥锁

c++ - 是否可以向 C++ 用户定义的文字运算符传递空指针?

c++ - lambda 采用 `char` 参数

c++ - 如何在 gdb 中将 C++ std::vector 的大小设为 "watch"?

c++ - 指针、 vector 列表 = 大量困惑

c++ - 访问 std::map 键和值