利用stl set_difference对车辆进出区域进行判定

来源:互联网 发布:九阴阴阳倒乱刃淘宝 编辑:程序博客网 时间:2024/05/18 09:18
set_difference,用于求两个集合的差集,结果集合中包含所有属于第一个集合但不属于第二个集合的元素。
#include <iostream>  #include <vector>  #include <string>  #include <algorithm>  using namespace std;  struct _AREA_VECTOR_STRUCT{int nAreaType;//区域类型int nAreaID;//区域ID};void CtestDlg::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)return structArea1.nAreaType < structArea2.nAreaType;elsereturn structArea1.nAreaID < structArea2.nAreaID;});sort(structAreaNow.begin(), structAreaNow.end(),[] (_AREA_VECTOR_STRUCT structArea1, _AREA_VECTOR_STRUCT structArea2)->bool{if(structArea1.nAreaType != structArea2.nAreaType)return structArea1.nAreaType < structArea2.nAreaType;elsereturn structArea1.nAreaID < structArea2.nAreaID;});int a = 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)return structArea1.nAreaType < structArea2.nAreaType;elsereturn structArea1.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)return structArea1.nAreaType < structArea2.nAreaType;elsereturn structArea1.nAreaID < structArea2.nAreaID;});if(OutStructAreaVector.size() != 0){TRACE("重新进");}}

0 0
原创粉丝点击