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

C++ 容器元素排序函数sort()

前言

std::sort()是C++标准库提供了一个模板函数,这个函数用于对给定范围内的元素进行排序,默认情况下,它使用元素类型的 < 操作符来确定元素的顺序。如果元素类型不支持 < 操作符,或者你需要按照不同于 < 的顺序来排序,你可以提供一个自定义的比较函数或者比较函数对象或lambda。

具体使用

升序

sort默认是升序排列

#include <algorithm> 
#include <vector> 
#include <iostream> 
int main() 
{ std::vector<int> vec = {4, 1, 3, 5, 2}; // 使用 std::sort 对 vec 进行排序 std::sort(vec.begin(), vec.end()); // 打印排序后的 vec for(int num : vec) { std::cout << num << ' '; } return 0; 
}

降序

sort如果需要实现降序排列,则需要自己实现一个比较器(函数对象或lambda)

#include <algorithm> 
#include <vector> 
#include <iostream> 
bool compare(int a, int b) 
{ // 降序排序 return a > b; 
} int main() 
{ std::vector<int> vec = {4, 1, 3, 5, 2}; std::sort(vec.begin(), vec.end(), compare); for(int num : vec) { td::cout << num << ' '; } return 0; 
}

扩展

如果想实现对自定义数据类型进行排序,则需要自己实现比较器

#include <algorithm> 
#include <vector> 
#include <iostream> struct people
{std::string name;int age;
}bool compare(people a, people b) 
{ // 降序排序 return a.age > b.age;
} int main() 
{ std::vector<people> vec;for(auto i = 1; i< 5; i++){people p;p.age = i;p.name = "asd" + std::to_string(i);}std::sort(vec.begin(), vec.end(), compare); sfor(people p : vec) { std::cout << p.name << ' ' << p.age << std::end;} return 0; 
}

注意事项

  • std::sort 并不保证使用特定的排序算法,但它通常实现为高效的排序算法,如快速排序、堆排序或归并排序等。
  • 排序操作是就地进行的,不需要额外的存储空间来存储排序后的序列,也就是说空间复杂度为O(1)
  • 排序操作的复杂度通常是 O(n log n),其中 n 是要排序的元素数量,具体情况取决于比较器
http://www.lryc.cn/news/431123.html

相关文章:

  • 如何在极狐GitLab中添加 SSH Key?
  • Kafka-设计原理
  • 51单片机的智能台灯设计【proteus仿真+程序+报告+原理图+演示视频】
  • 【论文阅读】一种针对多核神经网络处理器的窃取攻击(2020)
  • 基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)
  • pytest 常用的辅助函数和工具函数
  • 记录Java秋招面经(网上找的)
  • 记录k8s重启之后kubelet无法启动的问题
  • IA——网络操作设备VRP简介
  • Java项目: 基于SpringBoot+mysql企业客户管理系统(含源码+数据库+答辩PPT+毕业论文)
  • 基于STM32设计的智能安防系统(微信小程序)(218)
  • tomcat redis minio nginx windows开机自启
  • Docker构建镜像教程
  • 扑捉一只耿鬼(HTML文件)
  • Address localhost:1099 is already in use:tomcat频繁重启端口占用问题
  • HTTPS SEO优势
  • UE5 C++ 读取图片插件(一)
  • C语言行地址列地址区别,内存的分配
  • Unity 一键修改图片缩放保存为当前的一半大小
  • Identifying User Goals from UI Trajectories论文学习
  • [STM32]从零开始的STM32标准库环境搭建(小白向)
  • 解决 Android 上的 .NET MAUI/Xamarin.AndroidX 应用调用 ASP.NET Core API 端点时 SSL 连接被拒绝的问题
  • 助贷CRM系统:为金融中介行业打造全新营销管理模式
  • HBase 部署及shell操作
  • 使用Fign进行客户端远程调用和SpringFormEncoder的使用
  • golang 数据库使用注意事项
  • Leetcode面试经典150题-221.最大正方形
  • 51单片机-DS1302,操作简述
  • Vue3+Vite+Echarts 出现Missing semicolon错误
  • iOS——frame和bounds的区别