C++ STL sort 函数的用法
sort 在 STL 库中是排序函数,有时冒泡、选择等 $\mathcal O(n^2)$ 算法会超时时,我们可以使用 STL 中的快速排序函数 $\mathcal O(n \ log \ n)$ 完成排序
sort 在 algorithm 库里面,原型如下:
template <class RandomAccessIterator>
void sort ( RandomAccessIterator first, RandomAccessIterator last );
template <class RandomAccessIterator, class Compare>
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );
我们会发现 sort 有两种形式一个有三个参数,一个有两个参数,我们先讲讲两个参数的吧!
sort 的前两个参数是起始地址和中止地址
如:sort(a,a+n) 表示对 a[0] ... a[n-1] 排序
代码如下:
#include <algorithm>
#include <cstdio>
using namespace std;
int main() {
int n,a[1001];
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1); //对a[1] ... a[n] 排序
for (int i = 1;i <= n;i++) printf("%d",a[i]);
return 0'
}
这样是默认升序的,那如果是降序呢?
这样,我们就要用到第三个参数,第三个参数是一个比较函数
bool cmp(int a,int b) { return a > b; }
这个就是降序排序的比较函数,意思是:
是 a > b 时为true,就不交换,a < b 时为 false,交换
然后我们调用 sort(a+1,a+n+1,cmp) 就可以对 a 数组进行排序了
还可以调用 greater 和 less 进行升/降序排序,其实就是一个帮你写好的函数
int a[11],n;
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1,greater<int>()); //升序
sort(a+1,a+n+1,less<int>()); //降序,注意尖括号内写的是排序的数组类型
sort 也能对结构体排序,如:
#include <algorithm>
#include <cstdio>
using namespace std;
struct Node {
int x,y;
} p[1001];
int n;
bool cmp(Node a,Node b) {
if (a.x != b.x) return a.x < b.x;
return a.y < b.y;
}
int main() {
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d%d",&p[i].x,&p[i].y);
sort(p+1,p+n+1,cmp);
for (int i = 1;i <= n;i++) scanf("%d %d\n",p[i].x,p[i].y);
return 0;
}
以上代码的意思是,对 p 数组按 x 升序排序,若两个数的 x 相等则按 y 升序排序
结构体还可以重载运算符(greater 和 less 都是重载运算符的),使 sort 只用两个参数就可以按自己的规则排序,如:
#include <algorithm>
#include <cstdio>
using namespace std;
struct Node {
int x,y;
bool operator < (Node cmp) const {
if (a.x != cmp.x) return a.x < cmp.x;
return a.y < cmp.y;
}
}p[1001];
int n;
/*bool cmp(Node a,Node b) {
* if (a.x != b.x) return a.x < b.x;
* return a.y < b.y;
*}
*/
int main() {
scanf("%d",&n);
for (int i = 1;i <= n;i++) scanf("%d%d",&p[i].x,&p[i].y);
sort(p+1,p+n+1);
for (int i = 1;i <= n;i++) scanf("%d %d\n",p[i].x,p[i].y);
return 0;
}
C++ STL sort 函数的用法的更多相关文章
- STL sort函数的用法
sort在STL库中是排序函数,有时冒泡.选择等O(N^2)算法会超时时,我们可以使用STL中的快速排序O(N log N)完成排序 sort在<algorithm>库里面,原型如下: t ...
- C/C++ sort函数的用法
sort函数的用法(#include<algorithm>) 做ACM题的时候,排序是一种经常要用到的操作.如果每次都自己写个冒泡之类的O(n^2)排序,不但程序容易超时,而且浪费宝贵的比 ...
- C++ sort()函数的用法
C++sort()函数的用法 C++sort()函数的用法 近来看了c++标准库这本书,学到了很多,就把这其中的一点C++sort()函数的用法写下来和大家分享吧! (一)为什么要用c++标准库里的排 ...
- 分享stl sort函数坑点导致coredump问题
在<Effective STL> 的条款21中就有讨论:永远让比较函数对相同元素返回false! 也就是说在实现stl sort函数自定义比较器时,一定要满足这种严格弱序化的问题.
- 结构体与C++sort()函数的用法
C++sort()函数的用法 先看道题(本题来自http://codeup.cn/第26099): 题目描述 [问题描述] 高三全省联合模拟考试刚刚结束,经过各科老师的努力,各个学科的改卷工作终于结束 ...
- STL之sort函数的用法
说明:本文仅供学习交流,转载请标明出处,欢迎转载! STL封装了一个排序算法,该算法相应的头文件为#include<algorithm>,我们能够依据须要对一个数组进行排序或者降序. so ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL sort()函数
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同 ...
- STL——sort函数简介
参考:http://blog.csdn.net/s030501408/article/details/5329477 0)与C标准库qsort的比较:http://bbs.csdn.net/topic ...
随机推荐
- 大型Java进阶专题(八)设计模式之适配器模式、装饰者模式和观察者模式
前言 今天开始我们专题的第八课了.本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式. ...
- [spring cloud] -- 核心篇
核心功能: 分布式/版本化配置 服务注册合发现 服务路由 服务和服务之间的调用 负载均衡 断路器 分布式消息传递 ...... 技术体系 组件 服务注册与发现组件:Eureka.Zookeeper和C ...
- 感知机算法(PLA)代码实现
目录 1. 引言 2. 载入库和数据处理 3. 感知机的原始形式 4. 感知机的对偶形式 5. 多分类情况-one vs. rest 6. 多分类情况-one vs. one 7. sklearn实现 ...
- 华为云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 华为云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载ap ...
- 关于C# winform唤起本地已安装应用程序(测试win10,win7可用)
想要唤起本地已安装应用程序,我想到的有三种可行的方法: 第一种就是打开本地的快捷方式(有的应用可能没有快捷方式,但这种方法效率最高,可配合其他方法使用),快捷方式分为本地桌面快捷方式和开始菜单中的快捷 ...
- integrator.java目录
integrater 目录d:\zixing\zxing-zxing-3.3.2\android-integration\src\main\java\com\google\zxing\integrat ...
- Golang获取目录下的文件及目录信息
一.获取当前目录下的文件或目录信息(不包含多级子目录) func main() { pwd,_ := os.Getwd() //获取当前目录 //获取文件或目录相关信息 fileInfoList ...
- 安装nginx1.10和状态模块
环境 操作系统: Centos7.2 内核: 3.10.0-327.el7.x86_64 nginx: nginx-1.10.0.tar.gz 安装: 1.安装依赖包 yum -y install g ...
- Window版本的Python安装库大全
1. 位置 python的pip安装包网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载方法 wget https://download.lfd.uci ...
- Python os.rename() 方法
概述 os.rename() 方法用于命名文件或目录,从 src 到 dst,如果dst是一个存在的目录, 将抛出OSError.高佣联盟 www.cgewang.com 语法 rename()方法语 ...