sort()和优先队列的总结

一、关于sort函数

sort()排序函数默认是从小到大,

  1. a={5,3,2,1,6 };
  2. sort(a,a+n);
  3. //输出是1 2 3 5 6

?这里如果要从到小排序,则有两种方式可以满足

(1)写一个cmp()函数,定义大小关系

  1. bool cmp(int a,int b)
  2. {
  3.     return a>b;
  4. }
  5. a={5,3,2,1,6}
  6. sort(a,a+5,cmp)

(2)直接使用

  1. a={5,3,2,1,6}
  2. sort(a,a+5,greater<int>()) //注意后面的()不能少

以上都是sort()函数针对简单数据类型的。对结构体的排序如下:

(1)写一个cmp函数,定义结构体的大小关系

  1. struct Point{
  2. int x,y;
  3. }p[maxn];
  4. bool cmp(Point a,Point b)
  5. {
  6. return a.x<b.x;//按照x从小到大排序
  7. }

(2)在结构体里面重载运算符<

  1. struct Point{
  2. int x,y;
  3. bool operator< (const Point& a) const
  4. {
  5. return x>a.x;//x从大到小排序
  6. }
  7. }p[maxn];
  8. sort(p,p+n);

如果要想结构体也能使用greater<Point>()和less<Point>()

则:

要使用greater<Point>() 需要重载">"

要使用less<Point>()    需要重载"<"

二、关于优先队列

优先队列的默认排序是从大到小。

  1. int num[10]={14,10,56,7,83,22,36,91,3,47};
  2. priority_queue<int> q;

自定义排序方法:

(1)使用系统的比较函数

  1. int num[10]={14,10,56,7,83,22,36,91,3,47};
  2. priority_queue<int,vector<int>,greater<int> > que;/////采取最小优先策略,即按从小到大的顺序排列
  3. priority_queue<int,vector<int>,less<int> > que1; ////采取最大优先策略,即按从大到小的顺序排列

(2)重载<操作符定义优先级

  1. struct student
  2. {
  3. string name;
  4. float score;
  5. /////重载<运算符来实现改变优先规则
  6. bool operator < (const student &s) const
  7. {
  8. //////按score由小到大排列
  9. return score>s.score
  10. //////按score由大到小排列;
  11. //return score<s.score;
  12. }
  13. };

(3)通过

来自为知笔记(Wiz)

sort()和优先队列的总结

时间: 2024-08-25 15:54:18

sort()和优先队列的总结的相关文章

HDU 5884 Sort(二分+优先队列)

http://acm.hdu.edu.cn/showproblem.php?pid=5884 题意:有个屌丝设计了一个程序,每次可以将k个数组进行合并,代价为这k个数组总的长度之和.现在另外一个屌丝要他最后合并成一个数组时的总代价不能超过T.求k的最小值. 思路:贪心策略是长度越小的肯定先进行合并.一开始是直接用一个优先队列,但是这样会TLE的.. 后来改成了用两个队列进行模拟,先将数组排好序然后放入队列之中,每次合并之后的放入另一个队列之中,每次只需要再两个队列之中选择小的即可. 1 #inc

hdoj 3785 寻找大富翁【优先队列+sort排序】

寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4504    Accepted Submission(s): 1838 Problem Description 浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁. Input 输入包含多组测试用例.每个用例首先包含2个整数n(0<n<=100000)和m(0<m<

STL 优先队列的自定义比较函数与 sort() 等泛型算法的自定义比较函数的区别

前言 最近在刷算法题,常常需要自定义比较函数作为作为函数对象送入 stl 中,遇到了下面的问题: 泛型算法 sort() 的比较函数是这么写: //sort() 实现元素间关系为递增的比较函数 struct cmp{ bool operator () (const T& a, const T& b) const { return a.x < b.x; } }; //或者这样bool operator < (const T& a, const T& b) cons

南阳oj 757 期末考试【优先队列+sort排序】

描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗? 输入 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数. (以文件结尾) 输出 输出扣除的最小分数. 样例输入 3 3 10 3 5 3 1 3 1 6 3 2 1 3 7 1 3 4 2 6 1 4 7 2 6 4 5 3 4 样例输出 0 3

51nod1428(优先队列)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 题意:中文题诶- 思路:贪心 问最少要多少教室就是求最多有多少个时间段产生了交集咯.我们先用结构体存储区间并将其按照左端点升序排列,若左端点相同则按右端点升序排列. 接下来遍历所有区间,并维护一个优先队列,其中存储区间右端点值.对于当前区间,我们将优先队列中所有比当前区间左端点小的元素删除(因为其所在区间不会与当前区间相交嘛),然后再将当前区间的右端点加

优先队列实现原理分析

原文出处: ziwenxie 优先队列是在实际工程中被广泛应用的一种数据结构,不管是在操作系统的进程调度中,还是在相关的图算法比如Prim算法和Dijkstra算法中,我们都可以看到优先队列的身影,本文我们就来分析一下优先队列的实现原理. 优先队列 以操作系统的进程调度为例,比如我们在使用手机的过程中,手机分配给来电的优先级都会比其它程序高,在这个业务场景中,我们不要求所有元素全部有序,因为我们需要处理的只是当前键值最大的元素(优先级最高的进程).在这种情况下,我们需要实现的只是删除最大的元素(

HDU 5700 优先队列(或者multiset) 或 线段树

题目大意:有n个区间,求k个区间,使得这k个区间相交的区间内数字之和最大.数列的数字均>=0 优先队列思路: 按照左端点sort,然后枚举左端点,假设他被覆盖过k次,然后用优先队列来维护最右端即可. //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using namespace std; #pragma comment(linker,"/STACK:102400000,102400000&qu

51nod 1163 最高的奖励(贪心+优先队列)

题目链接:51nod 1163 最高的奖励 看着这题我立马就想到昨天也做了一道贪心加优先队列的题了奥. 按任务最晚结束时间从小到大排序,依次选择任务,如果该任务最晚结束时间比当前时间点晚,则将该任务的奖励值压入队列,否则将队列中最小的任务的奖励值替换,优先队列按奖励值小的优先. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<queue> 5 using name

HDOJ5437(优先队列)

Alisha’s Party Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 5471    Accepted Submission(s): 1370 Problem Description Princess Alisha invites her friends to come to her birthday party. Each