介绍

  • C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list、set、vector、map等,这些会在后面的学习中介绍。STL中还包括一些常用的算法,如排序、查找等。

  • 这些高级数据结构和算法的集合是世界上很多聪明人的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此可以直接使用。

  • 在NOI系列的比赛中,允许使用STL。

  • 为了提高编程效率,要尽量使用STL中提供的容器和算法,以避免不必要的低效率、重复编码。

  • 本文介绍使用STL中的sort函数进行排序

sort函数:2参数用法##

以下代码实现了数组的升序排序

#include<algorithm>         //sort函数由库<algorithm>提供,需要加载头文件
#include<iostream>
using namespace std;
int main(){
int a[10]={3, 1, 4, 1, 5, 9, 2, 6, 7, 0};
sort(a+0, a+10); //对sort的10个元素进行升序排序
for(int i=0; i<10; i++)
cout<<a[i]<<' ';
return 0;
}
  1. 第一个参数为排序范围的起始地址,第二个参数为排序范围的结束地址,但不包含该结束地址上的元素。可以理解为该范围定义了一个半开半闭区间:[m, n)

  2. 该函数属于同样可应用于char,float,double,bool等类型的数组。

sort函数:3参数用法##

由于sort的两参数用法仅能实现升序排列,有时,我们需要降序或者按照自定义的方式进行排序,例如按照数字位数的多少进行排序。这时可以使用sort函数的3参数用法,在2参数的基础上增加了一个参数:自定义函数。

以下代码实现了数组的降序排序

#include<algorithm>         //sort函数由库<algorithm>提供,需要加载头文件
#include<iostream>
using namespace std;
//自定义比较函数cmp
bool cmp(const int & A, const int & B){
return A>B; //如果修改为return A<B就还原为了升序排列
} int main(){
int a[10]={3, 1, 4, 1, 5, 9, 2, 6, 7, 0};
sort(a+0, a+10, cmp); //对sort的10个元素进行降序排序
for(int i=0; i<10; i++)
cout<<a[i]<<' ';
return 0;
}

自定义函数的本质是制定了一个对象A、B的比较规则,sort函数按照这个规则进行比较,从而完成排序。

sort函数:用于自定义的结构体类型数组

我们自定义的结构体类型数组同样可以使用sort进行排序,当然,由于自定义类型对象没有默认的比较规则,你必须使用三参数的sort函数,自定义一个函数来说明比较规则,看下面例题:

有N个学生的成绩需要进行排序,输入的每行信息包括“姓名”,“分数”,姓名是由无空格的英文组成。要求按照如下规则排序:成绩为第一排序条件,成绩相同的情况下,姓名按照字典先后顺序排列,输出为N行,每行一组姓名和分数

代码实现

#include<algorithm>         //sort函数由库<algorithm>提供,需要加载头文件
#include<iostream>
#include<cstring>
using namespace std; struct STU{ //自定义结构体类型STU
char name[50];
int score;
}s[100]; //STU类型数组s //自定义比较函数cmp说明比较规则
bool cmp(const STU & A, const STU & B){
if(A.score>B.score) return true;
if(A.score<B.score) return false;
if(strcmp(A.name, B.name)<0) return true;
return false;
} int main(){
int N;
cin>>N;
for(int i=0; i<N; i++)
cin>>s[i].name>>s[i].score;
sort(s, s+N, cmp); //使用sort排序
for(int i=0; i<N; i++)
cout<<s[i].name<<" "<<s[i].score<<endl;
return 0;
}

使用sort函数进行排序的更多相关文章

  1. 理解sort()函数的排序原理

    看了很多关于sort()函数的定义和解释还是不太清楚,尤其是初学者很容易看懵,这里讲讲自己是如何理解的. 首先,要理解sort()内部是利用递归进行冒泡排序的: 例如: var arr = [1, 5 ...

  2. FCL源码中数组类型的学习及排序函数Sort函数的分析

    Array 是所有数组的基类ArrayList 解决了所有Array 类的缺点    能动态扩容, 但是类型不安全的,而是会有装箱与拆箱的性能开销List<T> 则是解决了ArrayLis ...

  3. js中各个排序算法和sort函数的比较

    js中要实现数据排序,其实只需要用sort函数就能很好的满足了,但是我今天想知道他和其他排序算法的区别,比如耗时呀等.测了一组数据如下: // ---------- 一些排序算法 Sort = {} ...

  4. C中的qsort函数和C++中的sort函数的理解与使用

    一.qsort()函数 原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); ...

  5. leetcode-179-Largest Number(理解规则,自定义cmp函数进行排序)

    题目描述: 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明 ...

  6. C#中List调用库函数sort进行升序排序

    private void button1_Click(object sender, EventArgs e) { List<int> demo2 = new List<int> ...

  7. STL下<algorithm>下的sort函数

    定义: sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序.sort函数进行排序的时间复杂度为nlog2n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#i ...

  8. 回调函数及数组中sort()方法实现排序的原理

    1.回调函数:把一个方法A当一个参数值传递到另外一个函数B中,在B执行的过程当中我们随时根据需求让A方法执行:   什么是回调 :它是异步编程基本的方法,需要异步处理的时候一般采用后续传递的方式,将后 ...

  9. 使用STL库sort函数对vector进行排序

    使用STL库sort函数对vector进行排序,vector的内容为对象的指针,而不是对象. 代码如下 #include <stdio.h> #include <vector> ...

随机推荐

  1. git 本地推送远程仓库报错: error: failed to push some refs to 'https://github.com/yangtuothink/mxonline.git'

    报错现象 添加远程仓库后 推送代码的时候报错 报错分析 远程代码和本地代码不匹配问题 远程初始仓库的创建有些默认 的 README什么的本地是没有的 需要先同步后再上传 报错解决 git push - ...

  2. gogs : 添加 ssh An error has occurred : addKey: fail to parse public key: exec: "ssh-keygen": executable file not found in %PATH% - exec: "ssh-keygen": executable file not found in %PATH%

    服务器上缺少配置   ssh-keygen.exe的 环境变量.git的环境变量 在path 环境变量加上.重启gogs服务

  3. HNOI2017 抛硬币 (FakeBeng)

    除了队长快跑外最难的题吧. 除了需要写\(exLucas\)之外,还教会了我大量的卡常技巧. 首先\(70\)分就是个直接按题意模拟,易得\(ans=\sum_{j=0}^{b} C_{b}^{j}\ ...

  4. CSS圆角进化论

     CSS圆角发展过程 大致经历了3个阶段,包括: 背景图片实现圆角 CSS2.0+标签模拟圆角 CSS3.0圆角属性(border-radius属性)实现圆角 ☛背景图片实现圆角:==使用背景图片实现 ...

  5. 【php】php分隔字符串为数组

    工作中会经常分隔字符串为数组,我们可以用php内置函数str_split(),可是有时候字符串中包含中文,切割后会乱码,比如 print_r(str_split('dw氛围fesf',3)); 输出 ...

  6. Gym - 100989F

    You must have heard about Agent Mahone! Dr. Ibrahim hired him to catch the cheaters in the Algorithm ...

  7. CodeFroces-- Feel Good

    题目大意:给出一段无序数组找出任意 一段区间和*这段区间的最小值 使这个值最大 栈的经典问题 用栈预处理出当前ai 为这块区间最小值的时候 的区间范围(L 和R) #include<bits/s ...

  8. gradle配置统一管理

    配置全局参数 根目录build.gradle文件: 主要关注ext部分 // Top-level build file where you can add configuration options ...

  9. echarts x轴文字显示不全解决办法

    标题:echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐):http://blog.csdn.net/kebi007/article/details/68488694

  10. 洛谷P3354 河流

    有点权边权的树,选出k个关键点,根必须选.每个点的贡献为点权 * 到最近的关键祖先的距离.求最小总贡献. 解:树形DP是最毒瘤的算法...... 设fxij表示以x为根的子树中选了j个关键点,且x的最 ...