如果两个或多个整数对(第一个)是每个 vector 的子集,如何获得第三个 vector ,该 vector 是比较两个 vector 对的子集。
const std::vector<std::pair<int, MyObj>> lhs;
const std::vector<std::pair<int, MyObj>> rhs;
比较 vector A和 vector B的结果:
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)
应该导致 vector C包含:
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/