我想在转换函数中使用一对向量,而不是两个向量,但是不知道如何在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;
答案 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