如何获得比较两个向量对的子集?

恩德

如果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,但是看不到如何配对使用。

拉比德76

通常,如果要找到2 std::vectors的交点,则可以使用该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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章