总述:

介绍结构体数组和包含结构体的vector怎么样使用lower_bound进行二分查找,upper_bound同理。

前提:

lower_bound:返回数组中第一个大于等于该元素的下标,int aa = lower_bound(array,array+arrayLen,num) - array;

upper_bound:返回数组中第一个大于该元素的下标:int aa = upper_bound(array,array+arrayLen,num) - array;

结构体中查找:

把我们需要查找的数封装成一个结构体。然后才可以在结构体重进行查找。即使我们只需要针对某一维进行查找,也需要把整个结构体构造出来。

代码如下:

struct MY{int a,b;MY(){}MY(int a,int b):a(a),b(b){}bool operator<(const MY m)const{ //定义比较方式,这一步很重要return a<m.a;}
};int main(){MY m[10];for(int i=0;i<10;i++){m[i] = MY(i+1,2*i);cout<<m[i].a<<"  "<<m[i].b<<endl;}cout<<"请输入你需要查找的数字a:"<<endl;int num;cin>>num;sort(m,m+10);//进行二分之前需要排序int aa =  lower_bound(m,m+10,MY(num,0)) - m;  //需要把我们查找的数封装成一个结构体才能进行查找。cout<<"查到位置为:"<<aa<<endl;return 0;
}

这里我只需要查找第一维,并且我对第一维进行了排序,只有有序数列才可以进行二分,然后在查找的时候,把其他维置零即可。但是必须要封装成一个结构体

vector中也是同理:

代码:

struct MY{int a,b;MY(){}MY(int a,int b):a(a),b(b){}bool operator<(const MY m)const{ //定义比较方式,这一步很重要return a<m.a;}
};int main(){vector<MY>ve;for(int i=0;i<10;i++){ve.push_back(MY(i+1,2*i));cout<<ve[i].a<<"  "<<ve[i].b<<endl;}cout<<"请输入你需要查找的数字a:"<<endl;int num;cin>>num;sort(ve.begin(),ve.end());//进行二分之前需要排序int aa =  lower_bound(ve.begin(),ve.end(),MY(num,0)) - ve.begin();  //需要把我们查找的数封装成一个结构体才能进行查找。cout<<"查到位置为:"<<aa<<endl;return 0;
}

ve.begin()指向vector的开始,ve.end()指向vector的结尾。

结果如下:

以上

c++ 结构体和vector进行lower_bound和upper_bound相关推荐

  1. 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?

    作者:Tarun Telang 来源:https://dzone.com/articles/arraylist-or-linkedlist 本文为Java开发人员选择适当的顺序数据结构提供指导. Ar ...

  2. lower_bound、upper_bound、equal_range详解

    lower_bound.upper_bound.equal_range定义在头文件<algorithm>中 同时,有序容器如set,map也会提供成员函数lower_bound. 函数声明 ...

  3. 使用STL去除std::vector自定义结构体重复项

    最近搞了一个小东西要去除一个vector中重复的项.是这样的:我用组播搜索设备,得到设备IP信息.版本号信息,等,但有时会接收到多个相同IP设备的信息,因此要过滤掉重复的IP.我使用vector存储每 ...

  4. 恶补C++:重载手写堆结构体lower_bound()vector构造、析构函数setmappairstack

    部分目录 运算符重载 C++ 函数调用运算符 () 重载 我的经历 关于this 关于友元 附:重载函数 C++补充 优先队列 手写堆 手写堆的存储 手写堆的两个基本操作 插入节点的原理 求当前堆的最 ...

  5. STL之lower_bound,upper_bound二分查找函数 结构体

    codeforces上的代码是开放的,常常就能看到本渣与大神们的差距 比如二分查找... 1.在数组中,找出第一个4所在位置 输入: 14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10 ...

  6. vector 结构体类型 使用 排序

    如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...

  7. vector的元素不仅仅可以使int,double,string,还可以是结构体

    link #include<stdio.h> #include<algorithm> #include<vector> #include<iostream&g ...

  8. 用vector写结构体

    用vector写结构体 首先你要知道的是,结构体不是普通变量,不像 int 型 可以直接的 push_back() 结构体需要一个中间的变量,先给这个变量赋值之后. 再 push_back()那个中间 ...

  9. vector 结构体排序_指下码上横戈行——排序

    常见的排序算法有冒泡排序,选择排序,堆排序,快速排序这几种,但十三写博客的目的是为了提高自己的编程解题能力,故在这里介绍如何能快速解决那些涉及到排序的编程问题,首先针对这些问题C++ STL库中已经有 ...

最新文章

  1. python登陆,注册小程序
  2. 网博士自助建站系统_自助建站的优缺点介绍
  3. SharePoint 2013 配置HTTPS(SSL)
  4. WebServices应用集成框架ESB(Enterprise Service Bus 企业服务总线)
  5. java application作用域_servlet三大作用域:request,session,application
  6. *PAT_B_1030_Java(22分)_C++(25分)
  7. php换设备登录逻辑,登录和退出登录的操作逻辑
  8. 阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛
  9. python类的构造方法是_Python类中属性和构造方法的区别?
  10. html让后端删除数据库,Chrome在请求之间删除WebSQL数据库
  11. aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)
  12. 【招聘】阿里2022届春招实习生 - 机器学习/NLP/CV等
  13. 第一次发现国产剧能这么“好笑”,谢谢您嘞!!
  14. C中define的#和##
  15. 修改Foxmail日历,让星期一为每周第一天
  16. 安装原生Win7-SP1重要补丁
  17. linux摄像头V4L2 subdev,V4L2 subdev
  18. 塞雷三分钟漫画中国史4
  19. 进入注册表的一些常用命令
  20. 网络安全:常见的网络协议

热门文章

  1. 最新的IP归属地数据库-最新IP地址数据库
  2. 在PGConf.Asia-中文技术论坛,纵览16个方向42场演讲
  3. linux系统php连接dm达梦
  4. 腾讯游戏学院------SLG游戏技术【笔记】
  5. matlab里正负号怎么表示,正负号符号上下一起怎么输入?
  6. 北极没冰川了。。。南极下起了冻雨。。。
  7. echarts地图省份按顺序依次高亮demo(源码)
  8. 潜伏在大厂中“摸鱼”的打工人
  9. ios重签名shell脚本_03:双层签名和重签名流程以及shell脚本重签名
  10. C++内存分布探讨,x86和x64位的细微区别