首页 > 编程 > C++ > 正文

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

2020-05-23 13:48:18
字体:
来源:转载
供稿:网友

核心代码

#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;     else       return 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;     else       return 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;     else       return 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;     else       return structArea1.nAreaID < structArea2.nAreaID;      });    if(OutStructAreaVector.size() != 0)   {     TRACE("重新进");   } } 

 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表