C++ 如何获得比较对的两个向量的子集?
如果两个或多个向量对int的第一个向量是每个向量的子集,则如何获得第三个向量,该向量是比较向量对的两个向量的子集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,但看不
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.first
pair(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 );