greater包含在<iostream>中,用了他,可以使sort从大到小排序。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int a[] = {5,4,1,7,2,4};
sort(a,a+3,greater<int>());
for (int i = 0;i < 6;i ++)
printf("%d",a[i]);
return 0;
}
蓝色部分都是可以替换的,黑色不能替换,结构名随便取,T就是具体的类型
到时候,就会调用这个函数,把要比较的两个元素传进来。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct rule1{
bool operator()(const int & a1,const int & a2){
return a1 > a2;
}
};
struct rule2{
bool operator()(const int & a1,const int & a2){
return a1%10 < a2%10;
}
};
bool cmp(int a,int b){
return a>b;
}
int main()
{
int a[] = {5,4,1,7,2,4};
sort(a,a+3,greater<int>());
for (int i = 0;i < 6;i ++)
printf("%d",a[i]);
printf("\n---------------\n");
sort(a,a+3,cmp);
for (int i = 0;i < 6;i ++)
printf("%d",a[i]);
printf("\n---------------\n");
sort(a,a+3,rule1());
for (int i = 0;i < 6;i ++)
printf("%d",a[i]);
printf("\n---------------\n");
sort(a,a+3,rule2());
for (int i = 0;i < 6;i ++)
printf("%d",a[i]);
printf("\n---------------\n");
return 0;
}
现已有的三种排序 &符号不要忘了,忘了也没事,有了效率更高。
字符串的排序。
const int & s1
cmp中也是可以这样定义的。
bool cmp(const int & s1,const int & s2){
return s1 < s2;
}
这个等于的符号也特别的标注出来。
自定义的排序时,查找的函数应该与排序的函数相等。
struct Rule1{
bool operator()(const int & a1,const int & a2){
return a1%10 < a2%10;
}
};
struct Rule2{
bool operator()(int a1,int a2){
return a1%10 < a2%10;
}
};
bool Rule3(int a1,int a2){
return a1%10 < a2%10;
}
bool Rule4(const int & a1,const int & a2){
return a1%10 < a2%10;
}
得证,两种写法完全通用的。
找到的值是大于等于
#include <iostream>
#include <cstdio>
#include <algorithm>
#define NUM 7
using namespace std;
struct Rule{
bool operator()(const int & a1,const int & a2){
return a1%10 < a2%10;
}
};
void Print(int a[],int size){
for (int i=0;i < size ; ++i){
cout << a[i] << ",";
}
cout << endl;
}
int main()
{
int a[NUM] = {12,5,3,5,98,21,7};
sort (a,a+NUM);
Print(a,NUM); // => 3,5,5,7,12,21,98
int *p = lower_bound(a,a+NUM,5);
cout << *p << "," << p-a << endl; //=> 5,1
p = upper_bound(a,a+NUM,5);
cout << *p << endl; // => 7
cout << * upper_bound(a,a+NUM,13) << endl; //=>21;
// 指针的作用还是很厉害的,可以表示坐标,还可以直接读值
}