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函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
随机推荐
- nutzboot 使用nacos替换zookeeper
先放一段从网上拷贝一段分布式CAP理论的概念 分布式领域中存在CAP理论,且该理论已被证明:任何分布式系统只可同时满足两点,无法三者兼顾. ①C:Consistency,一致性,数据一致更新,所有数据 ...
- css绘制各种形状
代码:http://runjs.cn/code/9lyjtbxl: 效果:http://sandbox.runjs.cn/show/9lyjtbxl <!DOCTYPE html> < ...
- 解决IE6 IE7绝对定位弹层被后面的元素遮住
解决IE6 IE7绝对定位弹层被后面的元素遮住? 弹层边框一直被后面的元素边框遮住,试了n种方法,只有这个比较好用. <div class="tuijian-table"&g ...
- Vue --6 router进阶、单页面应用(SPA)带来的问题
一.Vue-router进阶 回顾学过的vue-router,并参考官方文档学习嵌套路由等路由相关知识. 二.单页面应用(SPA)带来的问题 1.虽然单页面应用有优点,但是,如果后端不做服务器渲染(h ...
- redis安装&启动
1.下载:redis.io,我下载的是5.0. 2.安装 1).tar -zxvf redis-5.0.0 2).进入src目录,执行make 3.回退到src的上一级目录,编辑redis.conf ...
- SpringCloud多模块整理
1.项目架构 —— project 父项目 —— client 子项目(客户端) 对外暴露的接口 —————— pom.xml 子项目的pom文件 ...
- PHP&Java 调用C#的WCF
步骤一:用C#声明WCF [ServiceContract] public interface IService1 { [OperationContract] void DoWork(); [Oper ...
- scp 可以在 2个 linux 主机间复制文件
Linux scp命令用于Linux之间复制文件和目录,具体如何使用这里好好介绍一下,从本地复制到远程.从远程复制到本地是两种使用方式.这里有具体举例: ================== Linu ...
- Java热启动
1.在项目中的pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> <art ...
- AJPFX关于Java中的集合
ava API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下: Collection<--List<--Vector Collection<--List& ...