当前位置: 首页 > article >正文

C++入门小馆:初识sort函数

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let's go!

我的博客:yuanManGan

我的专栏:C++入门小馆 C言雅韵集 数据结构漫游记  闲言碎语小记坊

目录

sort排序原型介绍

sort实现排序内置类型

排序数组

排序string类型

⾃定义排序

创建⽐较函数

结构体中重载()运算符-仿函数

排序结构体数据


sort排序原型介绍

sort是STL中的库函数,使用时要包含库函数<algorithm>

函数原型如下

template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare 
comp);

第一个类型少一个参数,实现的是升序的排序,如果你想实现降序,那就得使用第二个类型了。

这里面first表示开始位置,last就是结束位置了,这里可以传迭代器或者是指针类型的变量。

compare就是比较函数了。

sort实现排序内置类型

排序数组

排序string类型

注意一下这里排序string类型时排序是按照ASCII码值来升序排序的。

⾃定义排序

如果我们想要进行降序排序呢?就要用到下列这个类型的sort函数了。

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare 
comp);

创建⽐较函数

这个比较函数的返回类型设置为布尔类型,通过接受两个参数,运用<或>运算符来实现功能,为真返回ture,为假返回false。

bool compare(int x, int y)
{
    return x > y;//排降序
}

结构体中重载()运算符-仿函数

可以创建一个结构体类型的仿函数来实现功能

排序结构体数据

两个结构体也能进行排序,但得定一个按照什么排序

#include <iostream>
#include <algorithm>
using namespace std;
struct S
{
     string name;
     int age;
};
bool cmp_s_by_age(const struct S& s1, const struct S& s2)
{
     return s1.age > s2.age; //按年龄降序
}
bool cmp_s_by_name(const struct S& s1, const struct S& s2)
{
     return s1.name > s2.name;//按名字降序
}
//测试⾃定义⽐较函数
void test1()
{
     struct S s[3] = { {"zhangsan", 20}, {"lisi", 25}, {"wangwu", 18} };

     sort(s, s + 3, cmp_s_by_age);
     int i = 0;
     for (i = 0; i < 3; i++)
     {
         cout << s[i].name << " " << s[i].age << endl;
     }
}
struct CmpByNameLess
{
     bool operator()(const struct S& s1, const struct S& s2)
     {
         return s1.name < s2.name; //按照名字升序        
     }
};
struct CmpByAgeGreater
{
     bool operator()(const struct S& s1, const struct S& s2)
     {
         return s1.age > s2.age; //按照年龄降序
     }
};
//测试结构中重载()运算符实现⽐较
void test2()
{
     struct S s[3] = { {"zhangsan", 20}, {"lisi", 25}, {"wangwu", 18} };
     sort(s, s + 3, CmpByNameLess);
     int i = 0;
     for (i = 0; i < 3; i++)
     {
         cout << s[i].name << " " << s[i].age << endl;
     }
}
int main()
{
     test1();
     test2();
     return 0;
}

完结撒花!


http://www.kler.cn/a/442526.html

相关文章:

  • zerotier搭建虚拟局域网,自建planet
  • 我这不需要保留本地修改, 只需要拉取远程更改
  • STC的51单片机LED点灯基于KEIL
  • TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
  • C#与Vue2上传下载Excel文件
  • Java 泛型及其优势
  • spring学习(spring-bean实例化(实现FactoryBean规范)(延迟实例化bean))
  • java error(2)保存时间带时分秒,回显时分秒变成00:00:00
  • shared_ptr 智能指针
  • HDFS常用命令
  • IIS服务器部署C# WebApi程序,客户端PUT,DELETE请求无法执行
  • vue3 + ts + element-plus 表格中的input按回车聚焦到下一行
  • 电商大数据的几种获取渠道分享!
  • 数据可视化-4. 漏斗图
  • 国内主流数据库介绍及技术分享
  • vue iframe进行父子页面通信并切换URL
  • 基于Streamlit和OpenAI大模型的Chatbot App支持图片的多模态输入
  • 使用 Copilot 增强创造力:Mighty Media 的卓越数字化之旅
  • 【论文复刻】2021-2012年环境规制影响企业融资约束吗—基于新《环保法》的准自然实验(C刊《证券市场导报》)
  • RPA 在促销活动自动化处理中的创新应用
  • CSS3:重塑网页设计的新力量
  • YOLO目标检测算法
  • 【DevOps工具篇】Gitlab Runner设置(使用Docker in docker作为Runner)
  • LAPACK 程序 SSYEVD 的计算特征值的应用实例 C/Fortran
  • 数据结构 ——哈希表
  • React工具和库面试题目(二)