最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
c++利用stl set_difference对车辆进出区域进行判定
时间:2022-06-25 04:37:01 编辑:袖梨 来源:一聚教程网
| 代码如下 | 复制代码 |
#include #include #include usingnamespacestd; struct_AREA_VECTOR_STRUCT { intnAreaType;//区域类型 intnAreaID;//区域ID };
voidCtestDlg::OnBnClickedButton2() { vector<_area_vector_struct>structAreaHistory;//车辆上一次所在区域 vector<_area_vector_struct>structAreaNow;//车辆本次所在区域 vector<_area_vector_struct>OutStructAreaVector;//输出区域
_AREA_VECTOR_STRUCT structVehicle;
//模拟上一次车辆所在的区域集合 structVehicle.nAreaType = 2; structVehicle.nAreaID = 0x45; structAreaHistory.push_back(structVehicle); structVehicle.nAreaID = 0x7A; structAreaHistory.push_back(structVehicle); structVehicle.nAreaID = 0x88; structAreaHistory.push_back(structVehicle);
structVehicle.nAreaType = 3; structVehicle.nAreaID = 0x55; structAreaHistory.push_back(structVehicle); structVehicle.nAreaID = 0x88; structAreaHistory.push_back(structVehicle);
//模拟本次车辆所在的区域集合 structVehicle.nAreaType = 2; structVehicle.nAreaID = 0x88; structAreaNow.push_back(structVehicle); structVehicle.nAreaID = 0x45; structAreaNow.push_back(structVehicle); structVehicle.nAreaID = 0x11; structAreaNow.push_back(structVehicle);
structVehicle.nAreaType = 3; structVehicle.nAreaID = 0x55; structAreaNow.push_back(structVehicle);
//排序,先按区域类型排序,再按区域ID排序 sort(structAreaHistory.begin(), structAreaHistory.end(),[] (_AREA_VECTOR_STRUCT structArea1, _AREA_VECTOR_STRUCT structArea2)->bool { if(structArea1.nAreaType != structArea2.nAreaType) returnstructArea1.nAreaType < structArea2.nAreaType; else returnstructArea1.nAreaID < structArea2.nAreaID; }); sort(structAreaNow.begin(), structAreaNow.end(),[] (_AREA_VECTOR_STRUCT structArea1, _AREA_VECTOR_STRUCT structArea2)->bool { if(structArea1.nAreaType != structArea2.nAreaType) returnstructArea1.nAreaType < structArea2.nAreaType; else returnstructArea1.nAreaID < structArea2.nAreaID; });
inta = 0;
//求差,结果为离开区域的集合(出区域) set_difference(structAreaHistory.begin(), structAreaHistory.end(), structAreaNow.begin(), structAreaNow.end(), back_inserter(OutStructAreaVector), [](_AREA_VECTOR_STRUCT structArea1, _AREA_VECTOR_STRUCT structArea2)->bool { if(structArea1.nAreaType != structArea2.nAreaType) returnstructArea1.nAreaType < structArea2.nAreaType; else returnstructArea1.nAreaID < structArea2.nAreaID; });
if(OutStructAreaVector.size() != 0) { TRACE("出"); }
OutStructAreaVector.clear();//先清空
//反过来求差,结果为新进入的区域集合(新进区域) set_difference(structAreaNow.begin(), structAreaNow.end(), structAreaHistory.begin(), structAreaHistory.end(), back_inserter(OutStructAreaVector), [](_AREA_VECTOR_STRUCT structArea1, _AREA_VECTOR_STRUCT structArea2)->bool { if(structArea1.nAreaType != structArea2.nAreaType) returnstructArea1.nAreaType < structArea2.nAreaType; else returnstructArea1.nAreaID < structArea2.nAreaID;
});
if(OutStructAreaVector.size() != 0) { TRACE("重新进"); } } | |
相关文章
- 王者荣耀世界预注册入口 王者荣耀世界ID抢注方法指南 04-07
- 深海迷航 冰点之下结晶硫探索指南 深海迷航 结晶硫位置、采集方法与实用技巧 04-07
- 番茄免费小说阅读入口-番茄小说免费在线阅读 04-07
- 腐朽默示熔炉 腐朽默示熔炉解锁条件与详细机制解析 04-07
- 百度网盘官网首页地址-百度网盘官方登录入口 04-07
- 明日方舟渠道服账号交易平台推荐|安全靠谱的账号买卖APP汇总 04-07