Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获得比较对的两个向量的子集?_C++_C++11_C++14 - Fatal编程技术网

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

C++ 如何获得比较对的两个向量的子集?,c++,c++11,c++14,C++,C++11,C++14,如果两个或多个向量对int的第一个向量是每个向量的子集,则如何获得第三个向量,该向量是比较向量对的两个向量的子集 const std::vector<std::pair<int, MyObj>> lhs; const std::vector<std::pair<int, MyObj>> rhs; 应导致vectorC包含: pair(2, obj2) pair(4, obj4) 我一直在研究std::set_intersection,但看不

如果两个或多个向量对int的第一个向量是每个向量的子集,则如何获得第三个向量,该向量是比较向量对的两个向量的子集

const std::vector<std::pair<int, MyObj>> lhs; 
const std::vector<std::pair<int, MyObj>> rhs; 
应导致vectorC包含:

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

我一直在研究std::set_intersection,但看不到如何使用pairs实现这一点。

一般来说,如果您想找到2的交集,可以使用该算法。如果未按排序顺序提供矢量,则必须按排序


在这两种算法中,元素都是使用运算符进行比较的。如果我理解正确,您是否尝试过使用自定义比较设置交集,如[]auto a,auto b{return a.firstpair(2, obj2) pair(4, obj4)
#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 );