zoukankan      html  css  js  c++  java
  • lower_bound

    头文件:

    #include<algorithm>

    作用:

    查找第一个大于或等于给定数的元素或位置

    在从小到大的排列数组中

    注意注意:

      是排列好的,

      一般都是从小到大,

      但从大到小也可以,

      只不过做法与常规的从小到大的不太一样

    查找有序区间中第一个大于或等于某给定值的元素的位置

    其中排序规则可以通过二元关系来表示

    代码举例:

    1.针对容器

    (1).得到具体的元素

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 1;i < 4;i++)
            v.push_back(2 * i);//注意:此时v中的元素本身就是有序的
        vector<int>::iterator it = lower_bound(v.begin(),v.end(),3);
        printf("%d
    ",*it);
        return 0; 
    }

    (2).得到位置

    用到了指针偏移的技巧,只需要前去起始位置的指针即可

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 1;i < 4;i++)
            v.push_back(i * 2);//注意:此时v中的元素本身就是有序的 
        int pos = lower_bound(v.begin(),v.end(),3) - v.begin();
        printf("%d
    ",pos);
        return 0;
    }
    这时候返回pos就是所查找元素的位置,下标,
    这里查找到的元素应该是4在容器中的下标是1,
    所以输出pos的结果就是1


    2.针对数组

    返回元素

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int a[4] = {2,4,6,8};
        int *it = lower_bound(a,a+4,3);
        printf("%d
    ",*it);
        return 0;
    }

    返回位置

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int a[4] = {2,4,6,8};//注意:初始化中的元素本身就是有序的
        int pos = lower_bound(a,a+4,3)-a;
        printf("%d
    ",pos);
        return 0; 
     } 

    以上都是针对从小到大排列好的

    ------------------------------------------------------------------------------------------------------------------------

    下面是从大到小排列好的

    函数

      greater<int>()

    头文件
      #include<functional>

    假如说像上边一样元素为2 4 6 8,

    逆序则是8 6 4 2,

    那么求距离3最近表示的是与3最近的小于等于3的元素,

    输出结果则是元素2了,

    代码如下:

    #include<cstdio>
    #include<algorithm>
    #include<vector>
    #include<functional>
    using namespace std;
    vector<int> v;
    int main()
    {
        for(int i = 4;i > 0;i--)
            v.push_back(i * 2);
        vector<int>::iterator it = lower_bound(v.begin(),v.end(),3,greater<int>());
        printf("%d
    ",*it);
        return 0;
    }
    说明,要查找的有序序列必须是合法的,已经被排序的序列。
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/darlingroot/p/10395527.html
Copyright © 2011-2022 走看看