当前位置: 首页 > 编程笔记 >

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

乐正涵意
2023-03-14
本文向大家介绍c++利用stl set_difference对车辆进出区域进行判定,包括了c++利用stl set_difference对车辆进出区域进行判定的使用技巧和注意事项,需要的朋友参考一下

核心代码

#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("重新进"); 
  } 
} 
 类似资料:
  • 问题内容: 对于简单的神经网络,我想将一个函数应用于gonum的所有值。 Gonum有一个用于密集矩阵的方法,但没有用于向量的方法,因此我是手工完成的: 这似乎是并发执行的明显目标,所以我尝试了 这不起作用,也许不是意外的,因为它没有以结尾,因为return语句(完成所有工作)紧随其后。 我的问题是:如何使用并发将函数应用于gonum向量的每个元素? 问题答案: 首先请注意,这种并发计算的尝试假定

  • 问题内容: 如何在Java 8 Stream上实现“分区”操作?划分是指将流分成给定大小的子流。它在某种程度上与Guava Iterators.partition()方法相同,只是希望分区是延迟评估的Streams,而不是List的Streams。 问题答案: 将任意源流划分为固定大小的批次是不可能的,因为这会加重并行处理。并行处理时,你可能不知道拆分后的第一个子任务中有多少个元素,因此你无法为下

  • 如何在Java8 Stream上实现“分区”操作?通过分区,我的意思是把一个流分成给定大小的子流。不知何故,它将与GuavaIterators.partition()方法相同,只是希望分区是延迟计算的Streams而不是List的。

  • 问题是: 你有N (N代表你拥有的数字的数量)个数字。将他们分成两组,使各组数字之和的差异最小。 例子: 如果我们把1、9和3放在A组,把5和8放在B组,差异是0。 我认为首先我应该计算所有数字的总和并将其除以2。然后检查任何可能的数字组合,其总和不大于所有数字之和的一半。完成此操作后,我将选择最大的数字并打印出组。 我对所有的组合都有问题,特别是当N是大数字时。如何运行所有组合? 我的想法也有点

  • 目前正在搜索教程、解释和示例。我试过不同的例子,遇到了不同的错误。我当前的错误是: |错误编译错误编译[单元]测试:启动失败: 在我的测试报告中。它输出: 单元测试结果-摘要未执行测试。 我的“用户pec.groovy”代码是这样的: 有人能帮忙吗。我是圣杯新手。谢谢 除上述问题外,当我在课堂上省略了如下所示的禁忌: 我发现了这个错误: |运行1单元测试...1 of 1|失败:初始化错误(org

  • 本文向大家介绍利用tcpdump对mysql进行抓包操作技巧,包括了利用tcpdump对mysql进行抓包操作技巧的使用技巧和注意事项,需要的朋友参考一下 利用tcpdump对mysql进行抓包操作如下所示: 命令如下: 其中-i指定监听的网络接口,在RHEL 7下,网络接口名不再是之前的eth0,而是 eno16777736。 在RHEL 5&6下,可直接不带-i参数,因为它默认是eth0。在R