c++利用stl set_difference对车辆进出区域进行判定
2017-03-13 22:32
776 查看
核心代码
#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("重新进"); } }
您可能感兴趣的文章:
相关文章推荐
- 利用stl set_difference对车辆进出区域进行判定
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(一)
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(二)
- 利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【福利-内附源码与数据库】(一)
- C++利用stringstream进行数据类型转换实例
- C++_利用栈进行运算符表达式的运算
- 挑战30天C++入门极限-C/C++中利用数组名/指针进行排序实例
- 在C++/MFC中利用CMarkup类对XML进行操作
- 利用SWIG对C++库进行Python包装
- C++的黑科技 利用一个字符对字符串进行分离
- 利用Rational Rose进行C++代码的逆向工程介绍
- C#进行平台调用时利用C++头文件的小技巧
- 利用MATLAB进行车辆的速度测量
- C++中利用数组对字符进行除重和排序
- 《在C++/MFC中利用CMarkup类对XML进行操作》
- C++中利用Speex进行音频压缩
- C++利用csp进行签名和验签的例子
- C++中利用输入输入流进行一行输入
- 利用Rational Rose进行C++代码和数据库结构分析