详解C++|详解C++ sort函数的cmp参数
目录
- 1、升序排序
- 2、降序排序
- 3、结构体的排序实例
学算法的第一天你在学冒泡、桶排
在你还没搞明白快排和归并的时候
你已经学到了数据结构最后的堆排序和希尔排序
可以说排序是很多竞赛生的噩梦……
于是它诞生了
void std::sort()Sort the elements of a sequence using a predicate for comparison.参数:__first – An iterator.__last – Another iterator.__comp – A comparison functor.
针对一个地址区间完成排序,算法每次自动选择,以快排为主
C++需要头文件
#include
(当然万能头我也没意见)1、升序排序 最简单的就是用它完成int类型升序排序
Copy Line-numbers language-cpp#include#include using namespace std; int main() {int a[5] = {2, 1, 3, 5, 4}; sort(a, a + 5); for (int i = 0; i < 5; i++) cout << a[i] << " "; }
输出如下,很简单
【详解C++|详解C++ sort函数的cmp参数】1 2 3 4 5这里传入给sort的参数
a
和 a + 5
都是地址,和大多数编程语言一样,这里遵循左闭右开原则,即函数实际会读取和操作的五个地址如下:a + 0a + 1a + 2a + 3a + 4
2、降序排序 如果需要降序排序,程序如下
#include#include using namespace std; bool cmp(int x, int y){return x > y; }int main() {int a[5] = {2, 1, 3, 5, 4}; sort(a, a + 5, cmp); for (int i = 0; i < 5; i++) cout << a[i] << " "; }
输出:
5 4 3 2 1我们多写了一个bool类型的cmp函数,并将其地址作为第3个参数传给了sort
cmp可以替换其内置的函数来判断究竟该让哪些元素在前哪些元素在后
很多小伙伴可能有个疑惑:如何从实质上理解cmp函数,或者说我究竟该怎么记住cmp怎么写呢?
我们来看这三个点:
- 毋庸置疑,cmp函数返回bool类型,表示当前排序是否正确(具体见3)
- cmp函数应接受两个参数,类型与要排序的数组相同(可以是int、short和long long这些常见类型,当然也可以是结构体)
cmp返回值的实际意义是传入a、b两个参数,a在前b在后的排序是否是正确的,若是正确的返回1(true),否则返回0(false)
3、结构体的排序实例 结构体的排序实例:输入10个学生的名字和成绩,按照成绩从高到低排序后输出
输入数据:
Yixiangzhilv 90Mydr 60Xiaoming 10Mr.Glass 60GZN 80Wangzi 85Hyx 100Wyx 99Xth 0Zz 75
程序实现如下:
#include #includeusing namespace std; struct node {string name; int score; }; bool cmp(struct node x, struct node y) {return x.score > y.score; }int main() {struct node a[10]; for (int i = 0; i < 10; i++) cin >> a[i].name >> a[i].score; sort(a, a + 10, cmp); for (int i = 0; i < 10; i++) cout << a[i].name << " " << a[i].score << endl; }
(此处还有一个C++知识:如果已经定义结构体node,那么 struct node a[10]; 和 node a[10]; 都是合法的)
以上就是详解C++ sort函数的cmp参数的详细内容,更多关于C++ sort函数的cmp参数的资料请关注脚本之家其它相关文章,希望大家以后多多支持脚本之家
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- C语言浮点函数中的modf和fmod详解
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 虚拟DOM-Diff算法详解
- LSTM网络层详解及其应用实例
- c++基础概念笔记
- OC:|OC: WKWebView详解
- vue中的条件判断详解v-if|vue中的条件判断详解v-if v-else v-else-if v-show
- Vue组件之事件总线和消息发布订阅详解