c++ 结构体和vector进行lower_bound和upper_bound
总述:
介绍结构体数组和包含结构体的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相关推荐
- 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?
作者:Tarun Telang 来源:https://dzone.com/articles/arraylist-or-linkedlist 本文为Java开发人员选择适当的顺序数据结构提供指导. Ar ...
- lower_bound、upper_bound、equal_range详解
lower_bound.upper_bound.equal_range定义在头文件<algorithm>中 同时,有序容器如set,map也会提供成员函数lower_bound. 函数声明 ...
- 使用STL去除std::vector自定义结构体重复项
最近搞了一个小东西要去除一个vector中重复的项.是这样的:我用组播搜索设备,得到设备IP信息.版本号信息,等,但有时会接收到多个相同IP设备的信息,因此要过滤掉重复的IP.我使用vector存储每 ...
- 恶补C++:重载手写堆结构体lower_bound()vector构造、析构函数setmappairstack
部分目录 运算符重载 C++ 函数调用运算符 () 重载 我的经历 关于this 关于友元 附:重载函数 C++补充 优先队列 手写堆 手写堆的存储 手写堆的两个基本操作 插入节点的原理 求当前堆的最 ...
- STL之lower_bound,upper_bound二分查找函数 结构体
codeforces上的代码是开放的,常常就能看到本渣与大神们的差距 比如二分查找... 1.在数组中,找出第一个4所在位置 输入: 14 4 1 2 2 3 4 4 4 4 5 6 7 9 9 10 ...
- vector 结构体类型 使用 排序
如果要在Vector容器中存放结构体类型的变量,经常见到两种存放方式. 方式一:放入这个结构体类型变量的副本. 方式二:放入指向这个结构体类型变量的指针. 假设结构体类型变量是这样的, typedef ...
- vector的元素不仅仅可以使int,double,string,还可以是结构体
link #include<stdio.h> #include<algorithm> #include<vector> #include<iostream&g ...
- 用vector写结构体
用vector写结构体 首先你要知道的是,结构体不是普通变量,不像 int 型 可以直接的 push_back() 结构体需要一个中间的变量,先给这个变量赋值之后. 再 push_back()那个中间 ...
- vector 结构体排序_指下码上横戈行——排序
常见的排序算法有冒泡排序,选择排序,堆排序,快速排序这几种,但十三写博客的目的是为了提高自己的编程解题能力,故在这里介绍如何能快速解决那些涉及到排序的编程问题,首先针对这些问题C++ STL库中已经有 ...
最新文章
- python登陆,注册小程序
- 网博士自助建站系统_自助建站的优缺点介绍
- SharePoint 2013 配置HTTPS(SSL)
- WebServices应用集成框架ESB(Enterprise Service Bus 企业服务总线)
- java application作用域_servlet三大作用域:request,session,application
- *PAT_B_1030_Java(22分)_C++(25分)
- php换设备登录逻辑,登录和退出登录的操作逻辑
- 阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛
- python类的构造方法是_Python类中属性和构造方法的区别?
- html让后端删除数据库,Chrome在请求之间删除WebSQL数据库
- aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)
- 【招聘】阿里2022届春招实习生 - 机器学习/NLP/CV等
- 第一次发现国产剧能这么“好笑”,谢谢您嘞!!
- C中define的#和##
- 修改Foxmail日历,让星期一为每周第一天
- 安装原生Win7-SP1重要补丁
- linux摄像头V4L2 subdev,V4L2 subdev
- 塞雷三分钟漫画中国史4
- 进入注册表的一些常用命令
- 网络安全:常见的网络协议
热门文章
- 最新的IP归属地数据库-最新IP地址数据库
- 在PGConf.Asia-中文技术论坛,纵览16个方向42场演讲
- linux系统php连接dm达梦
- 腾讯游戏学院------SLG游戏技术【笔记】
- matlab里正负号怎么表示,正负号符号上下一起怎么输入?
- 北极没冰川了。。。南极下起了冻雨。。。
- echarts地图省份按顺序依次高亮demo(源码)
- 潜伏在大厂中“摸鱼”的打工人
- ios重签名shell脚本_03:双层签名和重签名流程以及shell脚本重签名
- C++内存分布探讨,x86和x64位的细微区别