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

发布时间 - 2026-01-11 00:09:22    点击率:

核心代码

#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  # C++ STL入门教程(7) multimap、multiset的使用  # c++ STL set_difference set_intersection set_union   # c++ STL库容器之集合set代码实例  # 新进  # 再按  # 清空  # struct  # _AREA_VECTOR_STRUCT  # std  # int  # namespace  # ID  # void  # nAreaID  # CtestDlg  # nAreaType  # algorithm  # cpp  # include  # brush  # pre  # class  # vector 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 大连 网站制作,大连天途有线官网?  如何在IIS7中新建站点?详细步骤解析  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何为API编写文档_Laravel API文档生成与维护方法  Laravel怎么上传文件_Laravel图片上传及存储配置  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  微信推文制作网站有哪些,怎么做微信推文,急?  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何生成腾讯云建站专用兑换码?  做企业网站制作流程,企业网站制作基本流程有哪些?  如何快速选择适合个人网站的云服务器配置?  jQuery validate插件功能与用法详解  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何安全更换建站之星模板并保留数据?  js实现点击每个li节点,都弹出其文本值及修改  JS实现鼠标移上去显示图片或微信二维码  详解MySQL数据库的安装与密码配置  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  EditPlus中的正则表达式实战(6)  详解CentOS6.5 安装 MySQL5.1.71的方法  ,南京靠谱的征婚网站?  如何获取PHP WAP自助建站系统源码?  如何快速配置高效服务器建站软件?  企业网站制作这些问题要关注  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  详解Huffman编码算法之Java实现  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  EditPlus 正则表达式 实战(3)  如何在云主机快速搭建网站站点?  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何处理异常和错误?(Handler示例)  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  如何用西部建站助手快速创建专业网站?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  JavaScript实现Fly Bird小游戏  🚀拖拽式CMS建站能否实现高效与个性化并存?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南