如果int的两个或更多对(第一个)是每个向量的子集,则如何获取第三个向量,该向量将成为比较两个对的向量的子集。
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
算法。如果未按排序顺序提供vecot,则必须按对其进行排序std::sort
。
在这两种算法中,使用来比较元素operator<
。如果operator<
未在向量的元素类型上定义,则必须将比较器显式传递给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 );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句