zoukankan      html  css  js  c++  java
  • STL入门--sort,lower_bound,upper_bound,binary_search及常见错误

    首先,先定义数组

    int a[10];

    这是今天的主角.

    这四个函数都是在数组上操作的

    注意要包含头文件

    #include<algorithm>

    sort:

    sort(a,a+10)

    对十个元素进行排序,顺序为从小到大.

        sort(a,a+10);
        for(int i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }

    自定义sort

    sort (a,a+10,Rule());

    按照Rule给定的规则进行排序.

    Rule函数的写法:(以比较个位数字为例)

     

        struct Rule
        {
            bool operator()(const int &a,const int &b)
            {
                return a%10>b%10;
            }
        };

    注意,这个要写在开头,main外面

    binary_search

    首先需要注意,是下划线,不要写错.

    binary_search(a,a+10,7,排序规则)//以查找数字7为例

    可以没有排序规则,也就是

    binary_search(a,a+10,7)//查找数字7

    但是,在查找之前,一定要注意要先排好序.也就是用一下sort.

    sort  binary_search的排序规则应保持一致

    还有就是binary_search 返回的是 个数.

    没有查找到的返回零,

    所以可以用来做函数的返回值.

    代码:

    查找615的个数

    1     int b=    binary_search(a,a+10,615);
    2     printf("%d",b);
    3     printf("
    ");
    4     int bb=    binary_search(a,a+10,615,Rule());
    5     printf("%d",bb);
    6     printf("
    ");

    lower_bound查找区间下标最小的且大于等于值的元素的地址

    upper_bound查找区间下标最小的且大于值的元素的地址

        int *p1,*p2;
        p1=lower_bound(a,a+10,15);
        printf("%d %d
    ",a[p1-a],p1-a);
        p2=upper_bound(a,a+10,15);
        printf("%d %d
    ",a[p2-a],p2-a);
        

    注意:

    p1-a是指其所在的下标

    问题:

    注意,只要用了sort,数组里的元素顺序就会改变,而查找必须是在对应的排序下的.所以在进行完一次查找时,需要进行下一次查找之前,要在进行一次需要规则的排序.

    记住,它顺序在改变!!

  • 相关阅读:
    用php实现一个双向队列 如何实现?
    extract函数行结果
    替换指定字符串中,键对应的键值
    php裁剪图片(支持定点裁剪)
    Swoole和Swoft的那些事 (Http/Rpc服务篇)
    FineCMS介绍
    打造属于自己的比特币钱包
    数据可视化的艺术
    如何通过织云 Lite 愉快地玩转 TSW
    你想知道的大数据知识都在这里
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/12316028.html
Copyright © 2011-2022 走看看