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

—-想了解c++利用stl set_difference对车辆进出区域进行判定分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

核心代码

  #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("重新进");     }   } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/487866.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐