【C++】STL 算法 ⑨ ( 预定义函数对象示例 - 将容器元素从大到小排序 | sort 排序算法 | greater<T> 预定义函数对象 )

本文主要是介绍【C++】STL 算法 ⑨ ( 预定义函数对象示例 - 将容器元素从大到小排序 | sort 排序算法 | greater<T> 预定义函数对象 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、预定义函数对象示例 - 将容器元素从大到小排序
    • 1、sort 排序算法
    • 2、greater<T> 预定义函数对象
  • 二、代码示例 - 预定义函数对象
    • 1、代码示例
    • 2、执行结果





一、预定义函数对象示例 - 将容器元素从大到小排序



1、sort 排序算法


C++ 标准模板库 ( STL , Standard Template Library ) 中 提供 了 sort 算法 函数 , 该函数定义在 <algorithm> 头文件 中 , 是一个泛型算法 ;

sort 算法 用于 对容器中的元素排序 , 该算法效率很高 , 可以 对给定 迭代器范围 内的元素进行排序 , 并且可以 根据用户指定的 比较函数 来定义排序的顺序 ;

用户指定的 比较函数 是一个 二元谓词 ;


std::sort 算法 默认排序规则 的 函数原型如下 :

template< class RandomIt >  
void sort( RandomIt first, RandomIt last );  
  • RandomIt first, RandomIt last 参数 : 该函数接受两个 随机访问迭代器 first 和 last , 它们定义了需要排序的序列范围 , 注意 : 该范围是一个 前闭后开区间 ;
  • 默认比较规则 : 该 范围内的元素将 默认 使用 < 操作符进行比较并排序 , 自定义类如果没有实现 < 操作符重载函数 , 可能会报错 ;

std::sort 算法 自定义排序规则 的 函数原型如下 :

template< class RandomIt, class Compare >  
void sort( RandomIt first, RandomIt last, Compare comp );
  • RandomIt first, RandomIt last 参数 : 该函数接受两个 随机访问迭代器 first 和 last , 它们定义了需要排序的序列范围 ; 注意 : 该范围是一个 前闭后开区间 ;
  • 自定义比较规则 Compare comp 参数 : 这个参数 是一个 二元谓词 , 即 接收 2 个参数 返回 bool 值的 函数对象 ; 该 范围内的元素将 使用 该 二元谓词 规则进行排序 ;

2、greater 预定义函数对象


C++ 标准模板库 ( STL , Standard Template Library ) 中 提供 了 greater<T> 预定义函数对象 , 这是一个 二元谓词 , 借助该函数对象可以很便的方式来比较两个值 , 确定第一个值是否大于第二个值 ;

该 函数对象 主要用于STL算法 中 控制排序顺序 , 搜索条件 等场景 ;


greater<T> 函数对象在 <functional> 头文件中定义 , 它接受一个 泛型类型参数 T , 该参数指定了要比较的元素类型 ;

greater<T> 函数对象 内部重载了函数调用操作符 operator() , 使得 该类的 实例对象 可以像普通函数一样被调用 ;





二、代码示例 - 预定义函数对象



1、代码示例


代码示例 :

#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"int main() {// 创建一个 set 集合容器vector<int> myVector;// 向容器中插入元素myVector.push_back(9);myVector.push_back(5);myVector.push_back(2);myVector.push_back(7);// 向 foreach 循环中传入 Lambda 表达式for_each(myVector.begin(), myVector.end(), [](int a) {std::cout << a << " ";});cout << endl;// 将 myVector 容器中的元素按照从大到小的顺序排列sort(myVector.begin(), myVector.end(), greater<int>());// 向 foreach 循环中传入 Lambda 表达式for_each(myVector.begin(), myVector.end(), [](int a) {std::cout << a << " ";});cout << endl;// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
};

2、执行结果


执行结果 :

9 5 2 7
9 7 5 2
Press any key to continue . . .

在这里插入图片描述

这篇关于【C++】STL 算法 ⑨ ( 预定义函数对象示例 - 将容器元素从大到小排序 | sort 排序算法 | greater<T> 预定义函数对象 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/591483

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python中lambda排序的六种方法

《Python中lambda排序的六种方法》本文主要介绍了Python中使用lambda函数进行排序的六种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1.对单个变量进行排序2. 对多个变量进行排序3. 降序排列4. 单独降序1.对单个变量进行排序

在Pandas中进行数据重命名的方法示例

《在Pandas中进行数据重命名的方法示例》Pandas作为Python中最流行的数据处理库,提供了强大的数据操作功能,其中数据重命名是常见且基础的操作之一,本文将通过简洁明了的讲解和丰富的代码示例,... 目录一、引言二、Pandas rename方法简介三、列名重命名3.1 使用字典进行列名重命名3.编