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函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
随机推荐
- SpringMVC之DispatcherServlet类
一.DispatcherServlet是什么 DispatcherServlet是前置控制器,配置在web.xml文件中的.拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据 ...
- 启动Eclipse时,出现 “Failed to load the JNI shared library "C:\Program Files\java\jdk1.7.....\jvm.dll"
原因1:给定目录下jvm.dll不存在. 解决方法:(1)重新安装jre或者jdk并配置好环境变量. (2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本 ...
- bash快捷键光标移动到行首行尾等
ctrl键组合ctrl+a:光标移到行首.ctrl+b:光标左移一个字母ctrl+c:杀死当前进程.ctrl+d:退出当前 Shell.ctrl+e:光标移到行尾.ctrl+h:删除光标前一个字符,同 ...
- 微信小程序实战
为了积攒粉丝,公司决定做一个一分钱姓名测算的小程序引导大家关注公众号. 实现的需求就是 1 首页 用户编辑姓名和性别进行提交 2 测算结果页 实现分享和支付功能 3 测算历史页面 看到用户曾经测算记 ...
- css 文本溢出时显示省略号
.text-ellipsis { width:100px; height:60px; overflow: hidden;//隐藏滚动条 text-overflow:ellipsis; white-sp ...
- 关于EasyML的使用
一.安装IntelliJ Idea 具体安装过程比较简单.但是遇到一个问题,如今LInux版本的IntelliJ的安装需要jdk1.8及以上版本的支持,但是EasyML目前仅支持jdk1.7的环境. ...
- Java Excel API的使用
https://wenku.baidu.com/view/724cc9e2dd88d0d232d46a1b.html
- 过流监测芯片ADS720/723
在电机应用领域经常需要用到过流监测和保护,allegro的ADS系列就可以很好实现.将芯片串接在电机之前,根据自己要保护的电流大小选择合适的量程,个根据自己ADC测量电压范围选择合适的灵敏度.这类芯片 ...
- 如何在windows下是用mysqldumpslow命令
1. 再一次点击mysql安装文件(默认是没安装mysqldumpslow这些脚本的),如图: 点击next如下图 点击Developer Components 旁边的选择this feature , ...
- pixhawk在linux(ubuntu16.04)下的开发环境搭建和源码编译
1查找安装文档(http://dev.px4.io/starting-installing-linux.html)(本文仅针对硬件为PIXHAWK的开发环境搭建,其他硬件请参考官方文档) ...