STL 之 sort 函数使用方法
关于Sort
Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因为它的排序方式类似于快排,且复杂度为O(NlogN),因此在多数情况下可以基本满足排序的需要,相较于自己手撸快排,使用sort函数在某些情况下也是比较好的一个选择。
使用前需引入头文件
#include <algorithm>
基本操作说明
调用格式:sort(first, last, comp)
参数说明:
first : 待排序数组起始地址;
last : 待排序数组结束地址;
comp : 排序方式,该参数是可省参数,如果省略则以升序方式排序;
那么下面我们就来具体看看这个函数是如何使用的;
Example 1(不使用comp参数的情况)
#include <iostream>
#include <algorithm>
using namespace std; int main() {
int vec[] = { , , , , , , , , };
for (int i = ; i < ; i++)
cout << vec[i] << ' ';
cout << endl;
sort(vec, vec + );
for (int i = ; i < ; i++)
cout << vec[i] << ' ';
cout << endl; return ;
}
一段很简单的样例程序,结果也是显而易见的;
上面的样例程序是在不使用参数comp的情况下进行的排序,可以看到默认是以升序排列的,那么想要进行降序排列应该如何实现?
Example 2
#include <iostream>
#include <algorithm>
using namespace std; bool comp(int a, int b) {
return a > b;
} int main() {
int vec[] = { , , , , , , , , };
for (int i = ; i < ; i++)
cout << vec[i] << ' ';
cout << endl;
sort(vec, vec + , comp);
for (int i = ; i < ; i++)
cout << vec[i] << ' ';
cout << endl; return ;
}
从以上这段样例程序中我们就可以了解到comp参数的使用方法,原来它不仅仅只是一个简单的参数,它实际上是一个比较函数,但需要注意的是comp虽然是一个函数,但是使用时不需要返回值,这是使用规则;
那么结果当然就是以降序的方式排列元素;
以上都是对sort排序的常用操作,下面再增加一个对结构体进行排序的方法;
Example 3
假设结构体S有三个成员,对结构体进行排序的规则是:先以a进行升序排序,如果a相等则以b进行降序排序,如果b相等则以c进行降序排序;
对于这类排序实际上与正常排序并没有不同,唯一需要改变的就是comp函数部分,以下是comp函数部分:
bool comp(S x, S y) {
if (x.a != y.a) return x.a < y.a;
if (x.b != y.b) return x.b > y.b;
return x.c > y.c;
}
针对排序规则比较复杂的结构体,这里我们用一个例子进行简单说明(关于例子的详细情况点击这里)
排序规则如下:按总分进行降序排序,如果总分相等则以分数1进行降序排序,如果分数1相等则以序号进行升序排序;
以下是comp函数部分:
bool comp(Stu x, Stu y) {
if (x.s1 + x.s2 > y.s1 + y.s2) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 > y.s1) return true;
else if (x.s1 + x.s2 == y.s1 + y.s2 && x.s1 == y.s1 && x.num < y.num) return true;
else return false;
}
STL 之 sort 函数使用方法的更多相关文章
- 使用STL库sort函数对vector进行排序
使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...
- qsort函数以及sort函数使用方法
sort函数的使用方法 做ACM题的时候,排序是一种常常要用到的操作. 假设每次都自己写个冒泡之类的O(n^2)排序,不但程序easy超时,并且浪费宝贵的比赛时间,还非常有可能写错. STL里面 ...
- 『嗨威说』算法设计与分析 - STL中Sort函数的实现原理初探
本文索引目录: 一.对Sort算法实现的个人阅读体会 二.Sort算法使用的三个排序算法的优点介绍 2.1 插入排序的优缺点 2.2 堆排序的优缺点 2.3 快速排序的优缺点 2.4 新的结合排序—— ...
- STL之sort函数的用法
说明:本文仅供学习交流,转载请标明出处,欢迎转载! STL封装了一个排序算法,该算法相应的头文件为#include<algorithm>,我们能够依据须要对一个数组进行排序或者降序. so ...
- C++中sort函数使用方法
一.sort函数 1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考 ...
- C++中STL的sort函数
简单介绍C++ sort函数 这个函数需要STL算法头文件 #include <algorithm> using namespace std; 这个sort( , , )可以带两个参数也可 ...
- 【C++】sort函数使用方法
一.sort函数 1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考 ...
- STL的sort函数是使用什么排序算法的?
先占坑,大概就是主要快速排序+插入排序+堆排序的合体
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
随机推荐
- SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景
一.拦截器简介 1.拦截器定义 拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 拦截器主要用来按照指定规则拒绝请求. 2.拦截器中应用 Token令牌 ...
- 基于SpringBoot构建分模块项目
前言 步骤过于详细,多图慎入!!! 假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理.于是我们创建一个项目balabalabala写完交工. 一段时间后 ...
- PJzhang:web漏洞扫描工具sitadel
猫宁!!! 参考链接:https://www.freebuf.com/sectool/194769.html 转变博客的写作思路,力求精简快捷,不浪费自己或者他人的时间. sitadel是一款精简的w ...
- JS高级学习历程-10
[面向对象] 面向对象的三大特性:封装.继承.多态 封装:在“类”里边有关键字public.protected.private 对成员进行声明,这样每个成员的访问都会受到不同关键字的限制. 继承:在p ...
- PAT甲级——1111 Online Map (单源最短路经的Dijkstra算法、priority_queue的使用)
本文章同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90041078 1111 Online Map (30 分) ...
- Mysql数据库服务启动
1.以系统管理员身份运行cmd.exe(C:\Windows\System32),输入net start mysql 2.在电脑右击->管理->服务和应用程序->服务->mys ...
- HDU 1029 一道微软面试题
http://acm.hdu.edu.cn/showproblem.php?pid=1029 给定一个数组,其中有一个相同的数字是出现了大于等于(n + 1) / 2次的.要求找出来. 1.明显排序后 ...
- (转)Mysql数据库之Binlog日志使用总结CentOS 7.x设置自定义开机启动,添加自定义系统服务
Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: li ...
- windows黑窗口关于java程序的常用命令
1.启动java程序 我要运行:E:\code\nhtask下的ElectricEye-0.0.1-SNAPSHOT.jar程序 #切换到程序目录cd E:\code\nhtaskE: java -j ...
- [HNOI 2012]三角形覆盖问题
Description 二维平面中,给定 N个等腰直角三角形(每个三角形的两条直角边分别 平行于坐标轴,斜边从左上到右下).我们用三个非负整数( x, y, d)来描 述这样一个三角形 ...