c++ - 如何获得比较两个成对向量的子集?
问题描述
如果两个或多个对 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
算法。如果向量没有按排序顺序提供,那么它们必须按 排序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 );
推荐阅读
- java - 如何在我的应用程序中的某个时间点验证 MacBook 中的 Touch_ID 或 Face_ID
- r - 使用 do.call 和 rbind 绑定四个数据帧时未使用参数的错误
- css - FontAwesome Pro 图标和 Bootstrap 4 面包屑
- java - Microsoft Graph /me 不适用于个人帐户
- python - crontab 只执行打印语句
- java - FluentWait 类型中的方法 until(Function ) 不适用于参数 (boolean, ExpectedCondition
) - swift - Apple Watch 可以使用 Web Sockets 吗?例如使用红蜘蛛
- flutter - 导入 Modal 类时有状态小部件出错
- architecture - 在委托持久性逻辑的情况下如何对微服务之间的通信进行建模
- python-3.x - 如何从弹性搜索中获取数据,如果有新数据则更新它,然后再次注入?