初始化一对向量并对其进行转换

时间:2018-12-08 15:20:13

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

我想在转换函数中使用一对向量,而不是两个向量,但是不知道如何在make_pair函数中初始化两个向量。

我有以下代码,它工作正常:

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;

1 个答案:

答案 0 :(得分:1)

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

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

将初始化向量对。

但是,如果您需要同时包含Point的{​​{1}}和radius成员的数据结构,则可能需要重新考虑(如@WhozCraig所述)

Circle

现在您可以再次玩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