gpt4 book ai didi

c++ - 如何获得比较两个成对 vector 的子集?

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:31 24 4
gpt4 key购买 nike

如果两个或多个 int 对(第一个)是每个 vector 的子集,如何获得第三个 vector ,它是比较两个 vector 对的子集。

const std::vector<std::pair<int, MyObj>> lhs; 
const std::vector<std::pair<int, MyObj>> rhs;

比较vectorA和vectorB的结果:

vectorA
pair(1, obj1)
pair(2, obj2)
pair(3, obj3)
pair(4, obj4)

vectorB
pair(2, obj2)
pair(4, obj4)
pair(5, obj5)
pair(6, obj6)

应该导致 vectorC 包含:

pair(2, obj2)
pair(4, obj4)

我一直在查看 std::set_intersection,但看不到如何使用对来实现这一点。

最佳答案

一般来说,如果要求2 std::vector s的交集, 您可以使用 std::set_intersection 算法。如果未按排序顺序提供 vector ,则必须按 std::sort 对它们进行排序.

在这两种算法中,元素都使用 operator< 进行比较。 .如果operator<未在 vector 的元素类型上定义,则必须显式将比较器传递给 std::sort分别std::set_intersection算法:

#include <vector>       // std::vector, std::set_intersection
#include <utility> // std::pair
#include <algorithm> // std::sort
#include <iterator> // std::back_inserter

bool comp(
const std::pair<int, MyObj> &a,
const std::pair<int, MyObj> &b )
{
return a.first < b.first;
}

std::vector<std::pair<int, MyObj>> lhs; 
std::vector<std::pair<int, MyObj>> rhs;

std::sort( lhs.begin(), lhs.end(), comp );
std::sort( rhs.begin(), rhs.end(), comp );

std::vector<std::pair<int, MyObj>> result;
std::set_intersection(
lhs.begin(), lhs.end(),
rhs.begin(), rhs.end(),
std::back_inserter(result), comp );

关于c++ - 如何获得比较两个成对 vector 的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com