时间:2021-05-20
核心代码
#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("重新进"); } }声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在c++里面不得不提的一个标准库,就是STL,STL包含很多实用的数据结构,如vector,list,map,set等都是我们常用的,而c++11也对STL做了
C++编程优与Pascal的原因之一是C++中存在STL(标准模板库)。STL存在很多有用的方法。C++模板库中的许多方法都需要相关参数有序,例如Sort()。
什么是C++11C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并
介绍STL(standardtemplatelibrary)标准模板库,是一种高效的C++程序库。STL分为三类:container(容器),iterator(
之前开发用LinuxC比较多,C++中的STL容器基本没有接触过。最近在学习C++,平时用到c++17中的部分新特性,下面就简单分享下自己C++的学习流程。一、