首页 技术 正文
技术 2022年11月18日
0 收藏 857 点赞 4,579 浏览 1817 个字

介绍

  • 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;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,027
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,518
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,365
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,146
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,780
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,857