首页 > 编程语言 > 详细

算法 set / multiset -- lower_bound()的二分搜索

时间:2019-04-27 14:09:39      阅读:297      评论:0      收藏:0      [点我收藏+]

lower_bound 在数组中搜索时 

搜不到

返回 .end(),

若需要返回0,用upper_bound()-lower_bound()

若要返回下一个下标  则需要在set / multiset 中使用lower_bound()

下面是测试代码及样例

技术分享图片
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<stack>
#include<list>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> p;
typedef long double ld;
#define mem(x) memset(x, 0, sizeof(x))
#define me(x) memset(x, -1, sizeof(x))
#define fo(i,n) for(i=0; i<n; i++)
#define sc(x) scanf("%lf", &x)
#define pr(x) printf("%lld\n", x)
#define pri(x) printf("%lld ", x)
#define lowbit(x) x&-x
const ll MOD = 1e18 +7;
const ll N = 6e6 +5;
set<ll> s;
int main()
{
    ll i, j, k, l=1;
    ll n, m, t;
    //cin>>n;
    n=10;
    for(i=0; i<n; i++)
        s.insert(i);
    set<ll>::iterator it;
    cout<<"输出set"<<endl;
    for(it=s.begin(); it!=s.end(); it++) k=*it,cout<<k<<" ";cout<<endl;
    while(cin>>k)
    {
        it=s.lower_bound(k);
        t=*it;
        //if(t==k)
        //cout<<"找到"
        cout<<t<<endl;
        if(it!=s.end())
        {
            if(t==k)
            cout<<"找到"<<t<<endl<<endl;
            else cout<<"未找到 返回下一个下标 输出*(it+1) "<<t<<endl<<endl;
            s.erase(it);
        }
        else
        {
            cout<<"返回 s.end()下标 "<<t<<endl<<endl;
        }
        for(it=s.begin(); it!=s.end(); it++) k=*it,cout<<k<<" ";cout<<endl<<endl;
    }
    return 0;
}
View Code

技术分享图片

 

算法 set / multiset -- lower_bound()的二分搜索

原文:https://www.cnblogs.com/op-z/p/10778422.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!