在leetcode刷題的時(shí)候發(fā)現(xiàn)原來sort還有這個(gè)用法記錄一下(原諒我的無知)。
sort的用法
添加頭文件 #include<algorithm>
sort源碼解析
- sort(pp.begin(),pp.end(),排序方式)
(1)第一個(gè)是要排序的數(shù)組的起始地址。
(2)第二個(gè)是結(jié)束的地址(最后一位要排序的地址)
(3)第三個(gè)參數(shù)是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個(gè)參數(shù),此時(shí)默認(rèn)的排序方法是從小到大排序。 - 那么怎么才能使其從大到小排序呢!
#include<iostream>
#include<algorithm>
using namespace std;
bool complare(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,complare);//在這里就不需要對(duì)complare函數(shù)傳入?yún)?shù)了,
//這是規(guī)則
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}
- 那么假使對(duì)于一個(gè)結(jié)構(gòu)體進(jìn)行排序呢?是否可以使用sort函數(shù)呢?
struct Interval {
int start;
int end;
};
vector<Interval>& intervals;
sort(intervals.begin(), intervals.end(), [](Interval &a, Interval &b) {return a.start < b.start;});
//可以直接將結(jié)構(gòu)體進(jìn)行排序
又或者如此;
bool cmp(interval x,interval y)
{
return x.start>y.start;
}
sort(intervals.begin(), intervals.end(), cmp);