c++利用stl set_difference對車輛進(jìn)出區(qū)域進(jìn)行判定
更新時間:2017年03月13日 22:32:28 作者:Leckun
這篇文章主要介紹了set_difference,用于求兩個集合的差集,結(jié)果集合中包含所有屬于第一個集合但不屬于第二個集合的元素,需要的朋友可以參考下
核心代碼
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct _AREA_VECTOR_STRUCT
{
int nAreaType;//區(qū)域類型
int nAreaID;//區(qū)域ID
};
void CtestDlg::OnBnClickedButton2()
{
vector<_AREA_VECTOR_STRUCT> structAreaHistory;//車輛上一次所在區(qū)域
vector<_AREA_VECTOR_STRUCT> structAreaNow;//車輛本次所在區(qū)域
vector<_AREA_VECTOR_STRUCT> OutStructAreaVector;//輸出區(qū)域
_AREA_VECTOR_STRUCT structVehicle;
//模擬上一次車輛所在的區(qū)域集合
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);
//模擬本次車輛所在的區(qū)域集合
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);
//排序,先按區(qū)域類型排序,再按區(qū)域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;
//求差,結(jié)果為離開區(qū)域的集合(出區(qū)域)
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();//先清空
//反過來求差,結(jié)果為新進(jìn)入的區(qū)域集合(新進(jìn)區(qū)域)
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("重新進(jìn)");
}
}
相關(guān)文章
C++利用stringstream進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換實例
這篇文章主要介紹了C++利用stringstream進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的方法,實例分析了使用stringstream進(jìn)行string轉(zhuǎn)int的操作技巧,需要的朋友可以參考下2015-01-01
C/C++函數(shù)調(diào)用棧的實現(xiàn)方法
這篇文章主要介紹了C/C++函數(shù)調(diào)用棧的實現(xiàn)方法,可實現(xiàn)一個簡單的腳本解釋器,具有一定的參考借鑒價值,需要的朋友可以參考下2014-10-10
C++實現(xiàn)LeetCode(228.總結(jié)區(qū)間)
這篇文章主要介紹了C++實現(xiàn)LeetCode(228.總結(jié)區(qū)間),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++語言實現(xiàn)線性表之?dāng)?shù)組實例
這篇文章主要介紹了C++語言實現(xiàn)線性表之?dāng)?shù)組,實例分析了C++實現(xiàn)數(shù)組形式線性表的原理與方法,需要的朋友可以參考下2015-04-04

