c++ 结构体和vector进行lower_bound和upper_bound
发布日期:2021-06-21 09:00:15 浏览次数:3 分类:技术文章

本文共 1209 字,大约阅读时间需要 4 分钟。

总述:

介绍结构体数组和包含结构体的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
>num; sort(m,m+10);//进行二分之前需要排序 int aa = lower_bound(m,m+10,MY(num,0)) - m; //需要把我们查找的数封装成一个结构体才能进行查找。 cout<<"查到位置为:"<
<

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

vector中也是同理:

代码:

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

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

结果如下:

以上

转载地址:https://blog.csdn.net/lwgkzl/article/details/82851346 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:leetcode 908. 最小差值 I(简单题)
下一篇:Matrix Chain Multiplication UVA - 442 (栈模拟)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月04日 13时42分35秒