STL:
1. 优先级队列 priority_queue
priority_queue(int,vector<int>, decltype(&bmp)) q(bmp); 用于声明一个优先级队列,其中第一个参数是指存储的类型,第二个是存储的容器一般默认是vector,第三个bmp是排序规则,
如果是要求一个序列中的最大的几个数,可用优先队列,定义bmp如下
static bool bmp(int &p, int &q){
return p>q;
}
如要求最小的则改为p<q 即可 , 注意队列中的大小顺序跟正常vector是相反的。
//求序列中最大的k个数
vector<int> getMaxKNums(vector<int> &arr,int k){
priority_queue<int,vector<int>,decltype(&bmp)> q(bmp);
for(int i=0;i<arr.size();i++){
if(q.size()==k){
if(arr[i]>q.top()){
q.pop();
q.push(arr[i]);
}
}
else{
q.push(arr[i]);
}
}
vector<int> res;
while(!q.empty()){
res.push_back(q.top());
q.pop();
}
return res;
}
2. 自定义排序
//升序
static bool mySort(int &p,int &q){
return p<q;
}
//降序
static bool mySort(int &p,int &q){
return p>q;
}
//如果return的结果是true,那么前一个参数会先进入容器,也就是在前
sort(arr.begin(),arr.end(),mySort);
也可以用匿名函数
//匿名函数 升序
int main(){
vector<int> arr;
sort(arr.begin(),arr.end(),[&](int &p, int &q){
return p<q;
})
}