C++:sort自动排序函数

在 C++ 中,std::sort 是一个用于对容器(如数组、std::vectorstd::deque 等)中的元素进行排序的标准库算法。std::sort 函数定义在 <algorithm> 头文件中,提供了多种排序方法,包括默认排序和自定义排序。

基本用法

  1. 排序 std::vector:

默认情况下,std::sort 按升序排序,即从小到大。你可以使用 std::sortstd::vector 进行排序,如下所示:

#include <iostream>
#include <vector>
#include <algorithm>int main() {std::vector<int> numbers = {4, 1, 8, 5, 2};// 默认升序排序std::sort(numbers.begin(), numbers.end());// 输出排序后的结果for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

输出:

1 2 4 5 8

2.自定义排序:

你可以通过提供自定义的比较函数或函数对象来改变排序的方式。例如,如果你希望按降序排序,可以使用 std::greater<> 函数对象:

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>int main() {std::vector<int> numbers = {4, 1, 8, 5, 2};// 降序排序std::sort(numbers.begin(), numbers.end(), std::greater<int>());// 输出排序后的结果for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;return 0;
}

3.排序自定义对象:

如果你有一个自定义类型的对象,你可以提供一个自定义的比较函数来对这些对象进行排序。例如,假设你有一个 Person 结构体,你希望按年龄对 Person 对象进行排序:

#include <iostream>
#include <vector>
#include <algorithm>struct Person {std::string name;int age;Person(const std::string& n, int a) : name(n), age(a) {}
};// 自定义比较函数
bool compareByAge(const Person& a, const Person& b) {return a.age < b.age;
}int main() {std::vector<Person> people = {{"Alice", 30},{"Bob", 25},{"Charlie", 35}};// 按年龄排序std::sort(people.begin(), people.end(), compareByAge);// 输出排序后的结果for (const auto& person : people) {std::cout << person.name << " (" << person.age << ") ";}std::cout << std::endl;return 0;
}

输出:

Bob (25) Alice (30) Charlie (35)

std::sort 函数原型

std::sort 的基本原型如下:

template< class RandomIt >
void sort( RandomIt first, RandomIt last );template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
  • firstlast: 这两个迭代器指定了要排序的范围 [first, last)
  • comp: 是一个可选的比较函数或函数对象,用于指定排序规则。如果省略,std::sort 默认使用 < 操作符进行升序排序。

总结

  • 默认排序: std::sort 默认按升序排序。
  • 自定义排序: 通过提供比较函数或函数对象可以进行自定义排序。
  • 排序对象: 可以排序自定义对象,只需提供适当的比较逻辑。

std::sort 是一个高效的排序算法,通常实现为快速排序(quicksort),在平均情况下具有 O(n log n) 的时间复杂度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升&#xff0c;深成指、创业板指盘中跌逾1%&#xff0c;午后集体拉升翻红。华为产业链午后走强…

可解释性机器学习的目标

为了解释比如决策树、随机森林的意义&#xff0c;我们首先应该定义可解释性的目标是什么。或者 说什么才是最好的可解释性的结果呢&#xff1f;很多人对于可解释性机器学习会有一个误解&#xff0c;觉得一 个好的可解释性就是要告诉我们整个模型在做什么事。我们要了解模型的一…

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functional screen 其它坏屏 flex c…

B-树底层原理

一、B-树介绍 定义&#xff1a; B-树&#xff08;B-Tree&#xff09;是一种自平衡的树形数据结构&#xff0c;广泛应用于数据库和操作系统中。它的设计目标是减少搜索、顺序访问、插入和删除操作中比较次数和移动次数&#xff0c;特别适合于磁盘中数据的存储和检索。 性质&a…

Linux:从入门到放弃

目录 一、基础巩固Linux&#xff1a;常用命令 二、实战应用Linux&#xff1a;CentOS7基础配置Linux&#xff1a;CentOS7安装MySQL 三、常见问题Linux&#xff1a;yum源失效问题 一、基础巩固 Linux&#xff1a;常用命令 二、实战应用 Linux&#xff1a;CentOS7基础配置 Lin…

C语言程序设计——结构体

一、结构体的定义 有时需要将不同类型的数据组合成一个有机体,以便于引用 声明一个结构体类型的一般形式为: struct 结构体名{成员表列}; 结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。 ①先声明结构体类型再定义变量 struct student # 结…

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1&#xff08;高级消息队列协议&#xff09;是一种网络协议&#xff0c;它允许遵从该协议的客户端&#xff08;Publisher或者Consumer&#xff09;应用程序与遵从该协议的消息中间件代理&#xff08;Broker&#xff0c;如RabbitMQ&#xff09;…

欺诈文本分类检测(十四):GPTQ量化模型

1. 引言 量化的本质&#xff1a;通过将模型参数从高精度&#xff08;例如32位&#xff09;降低到低精度&#xff08;例如8位&#xff09;&#xff0c;来缩小模型体积。 本文将采用一种训练后量化方法GPTQ&#xff0c;对前文已经训练并合并过的模型文件进行量化&#xff0c;通…

Unity3D Android多渠道极速打包方案详解

在移动应用开发过程中&#xff0c;特别是在使用Unity3D进行Android游戏或应用开发时&#xff0c;多渠道打包是一个常见且重要的需求。不同的渠道&#xff08;如Google Play、华为应用市场、小米应用商店等&#xff09;可能需要不同的配置和包名&#xff0c;手动进行这些操作既耗…

【电子通识】规格书上的%FS和%RD具体指什么?

在仪器仪表类的手册上&#xff0c;常见的精度表达规格显示方式&#xff1a;%FS 和%RD 究竟如何解读呢&#xff1f; 术语解说 %RD(Reading)&#xff1a;用于表示对比显示值(读值)存在多少(%)的误差 %FS(Full Scale)&#xff1a;用于表示对比全量程存在多少(%)的误差 %SP(Set Poi…

基于ssm+vue+uniapp的电影交流平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

多文件编程实现链表创建,插入,输出(上)

linklist.c #include "linklist.h" //创建空的链表&#xff0c;为头结点在堆区分配空间 linklist_t *creat_empty_linklist() {linklist_t *head NULL;head (linklist_t *) malloc(sizeof(linknode_t));if(NULL head){printf("malloc is fail!\n");ret…

泛型及其使用

1. 为什么要用泛型 我们来看下面这个场景&#xff1a; 有一个Dog类和Cat类&#xff0c;创建一个ArrayList用来存放dog对象&#xff0c;程序员不小心往里边添加了一个Cat对象&#xff0c;此时不会有问题&#xff0c;但是当我们遍历这个ArrayList时&#xff0c;强行转为Dog类就会…

项目小结二()

一.个人信息的界面 这里可以进行用户信息的修改&#xff0c;并渲染数据上去 二.这两天&#xff0c;出现的问题&#xff1a; 1.mybatis中 字段取别名 &#xff08;还没验证&#xff0c;是否正确&#xff09; 问题描述&#xff1a;由于实体类中的变量名&#xff0c;与数据库中…

CTF—杂项题目

1.ctfshow-Misc入门-misc17 1 用010editer打开图片后没有直接搜到ctf&#xff1b; 2 用binwalk分析文件发现有一个bzip2的隐藏文件并将其分离&#xff1b; 3 得到一个压缩文件D86.bz2&#xff1b; 4 但使用解压命令进行解压时&#xff0c;显示文件受损&#xff1b; 5 参考别人…

SpringBoot学习(8)RabbitMQ详解

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件最主要的作用是解耦&#xff0c;中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&…

Docker高级管理--Compose容器编排与私有仓库(Docker技术集群与应用)

本文介绍了Docker的三大工具&#xff1a;Docker Machine用于创建和管理Docker主机&#xff0c;Docker Compose用于单引擎模式下的多容器应用部署和管理&#xff0c;而Docker Swarm则是一个集群管理工具&#xff0c;提供微服务应用编排功能。Docker Machine支持在不同环境配置Do…

从零实现诗词GPT大模型:实现多头自注意力

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 在上一篇文章的最后,我们已经介绍了为什么要使用多头注意力了,本篇文章我们主要来实现多头自注意力,然后综合我们之前实现的FFN和TransformerBlock其实就差不多完成了整个GPT模型的实现了。 在开始实现之…

技术成神之路:设计模式(十三)访问者模式

介绍 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许你在不改变对象结构的前提下&#xff0c;定义作用于这些对象的新操作。这种模式通过将操作逻辑从对象结构中抽离出来&#xff0c;使得新的操作可以无缝地添加到现有对象中。 1.定…

PDF转Excel小达人养成记

在现代职场&#xff0c;数据管理与格式转换可谓是日常任务的重头戏&#xff1b;有时我们手头有一份PDF文件&#xff0c;但需要将其中的数据整理成Excel表格&#xff0c;这该如何是好&#xff1f;别急&#xff0c;今天我就来给大家介绍几款好用的PDF转Excel工具&#xff0c;以及…