【C++ STL】sort函数的应用

SceneSplat 目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。 阅读详情

Sort是一种高效的排序算法,常使用的五种示例如下。
示例代码采用编译器vs2012,任何一款支持c++11标准的编译器都可以运行。

包含头文件

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>

1、重载操作符
重载对应操作符<、>、<=、>=来实现排序
代码

namespace SORT_1
{
//重载操作符
struct StTest
{
StTest(int nInput)
: nVal(nInput)
{}

    bool operator<(const StTest& other) const
    {
        return (this->nVal < other.nVal);
    }

    bool operator<=(const StTest& other) const
    {
        return (this->nVal <= other.nVal);
    }

    bool operator>(const StTest& other) const
    {
        return (this->nVal > other.nVal);
    }

    bool operator>=(const StTest& other) const
    {
        return (this->nVal >= other.nVal);
    }

    int nVal;
};

void Test()
{
    std::vector<StTest> vTest;
    vTest.push_back(StTest(3));
    vTest.push_back(StTest(2));
    vTest.push_back(StTest(5));
    vTest.push_back(StTest(4));
    vTest.push_back(StTest(1));

    //从小到大排序
    std::sort(vTest.begin(), vTest.end(), std::less<StTest>());
    for (auto elem : vTest)
    {
        std::cout<<(elem.nVal)<<" ";
    }
    std::cout<<std::endl;

    //从大到小排序
    std::sort(vTest.begin(), vTest.end(), std::greater<StTest>());
    for (auto elem : vTest)
    {
        std::cout<<(elem.nVal)<<" ";
    }
    std::cout<<std::endl;
}

}

调用

SORT_1::Test();

结果

1 2 3 4 5
5 4 3 2 1

2、函数指针
示例代码

namespace SORT_2
{
    //函数指针
    struct StTest
    {
        StTest(int nInput)
            : nVal(nInput)
        {}


        int nVal;
    };

    bool SortFunc(const StTest& lVal, const StTest& rVal)
    {
        return (lVal.nVal < rVal.nVal);
    }

    void Test()
    {
        std::vector<StTest> vTest;
        vTest.push_back(StTest(3));
        vTest.push_back(StTest(2));
        vTest.push_back(StTest(5));
        vTest.push_back(StTest(4));
        vTest.push_back(StTest(1));

        std::sort(vTest.begin(), vTest.end(), SortFunc);
        for (auto elem : vTest)
        {
            std::cout<<(elem.nVal)<<" ";
        }
        std::cout<<std::endl;
    }
}

调用
SORT_2::Test();

结果
1 2 3 4 5

3、仿函数
当排序需要传参时,我们可以用仿函数。
代码示例

namespace SORT_3
{
    //仿函数
    struct StTest
    {
        StTest(int nInput)
            : nVal(nInput)
        {}

        int nVal;
    };
//求模后排序
class CModuleFunc
{
public:
    CModuleFunc(int nTest)
        : m_nTest(nTest)
    {}

    bool operator()(const StTest& lVal, const StTest& rVal)
    {
        if (m_nTest <= 0) {return false;}

        int nlModule = (lVal.nVal%m_nTest);
        int nrModule = (rVal.nVal%m_nTest);
        return (nlModule < nrModule);
    }

private:
    int m_nTest;
};

void Test()
{
    std::vector<StTest> vTest;
    vTest.push_back(StTest(3));
    vTest.push_back(StTest(2));
    vTest.push_back(StTest(5));
    vTest.push_back(StTest(4));
    vTest.push_back(StTest(1));

    std::sort(vTest.begin(), vTest.end(), CModuleFunc(3));
    for (auto elem : vTest)
    {
        std::cout<<(elem.nVal)<<" ";
    }
    std::cout<<std::endl;
}

}

调用
SORT_3::Test();

结果
3 4 1 2 5

4、bind+function
c++11引入了bind和function,我们可以简化一下仿函数写法。

代码示例

namespace SORT_4
{
    //bind+function
    struct StTest
    {
        StTest(int nInput)
            : nVal(nInput)
        {}

        int nVal;
    };
//求模后排序
bool ModuleFunc(const StTest& lVal, const StTest& rVal, int nTest)
{
    if (nTest <= 0) {return false;}

    int nlModule = (lVal.nVal%nTest);
    int nrModule = (rVal.nVal%nTest);
    return (nlModule < nrModule);
}

void Test()
{
    std::vector<StTest> vTest;
    vTest.push_back(StTest(3));
    vTest.push_back(StTest(2));
    vTest.push_back(StTest(5));
    vTest.push_back(StTest(4));
    vTest.push_back(StTest(1));

    //pFnc类型:std::function<bool (const StTest&, const StTest&)>
    auto pFunc = std::bind(&ModuleFunc, std::placeholders::_1, std::placeholders::_2, 3);
    std::sort(vTest.begin(), vTest.end(), pFunc);
    for (auto elem : vTest)
    {
        std::cout<<(elem.nVal)<<" ";
    }
    std::cout<<std::endl;
}

}

调用

SORT_4::Test();

结果

3 4 1 2 5

5、lambda
C++ 11引入了lambda,可以创建匿名函数来简化排序。
代码

namespace SORT_5
{
    //lambda
    struct StTest
    {
        StTest(int nInput)
            : nVal(nInput)
        {}

        int nVal;
    };
void Test()
{
    std::vector<StTest> vTest;
    vTest.push_back(StTest(3));
    vTest.push_back(StTest(2));
    vTest.push_back(StTest(5));
    vTest.push_back(StTest(4));
    vTest.push_back(StTest(1));

    //采用lambda来进行排序
    int nTest = 3;
    std::sort(vTest.begin(), vTest.end(), [&nTest](const StTest& lVal, const StTest& rVal){
        if (nTest <= 0) {return false;}

        int nlModule = (lVal.nVal%nTest);
        int nrModule = (rVal.nVal%nTest);
        return (nlModule < nrModule);
    });

    for (auto elem : vTest)
    {
        std::cout<<(elem.nVal)<<" ";
    }
    std::cout<<std::endl;
}

}

调用

SORT_5::Test();

结果

3 4 1 2 5

6、总结
当操作对象已重载操作符时,可以直接sort
当排序算法是局部临时算法时,可以采用lambda
当排序算法可提出共用时,可采用bind+function

21天教你学会PCIe专栏(17)--多功能设备 1.1 定义多功能PCIe设备:多功能PCIe设备是指在一个物理设备中集成了多种功能的设备。这些功能可以通过不同的PCIe功能(Function)来实现,每个功能可以独立配置和管理。1.2 优点资源利用率:通过集成多种功能,减少物理设备的数量,提高资源利用率。成本效益:减少硬件成本和功耗,提高系统的经济性。灵活性:用户可以根据需要启用或禁用不同的功能,提高系统的灵活性。可扩展性:通过增加新的功能,扩展设备的功能,提高系统的可扩展性。1.3 应用场景网络设备。 阅读详情

相关推荐

STM32F103 CAN通信避坑指南:从标准库配置到收发测试的完整流程

本文详细介绍了STM32F103 CAN通信的实现流程,从标准库配置到收发测试,帮助开发者避开常见陷阱。内容涵盖硬件连接、波特率计算、过滤器配置及错误处理等关键环节,提供实用的代码示例和调试技巧,确保CAN通信的稳定性和可靠性。

weixin_30627341的博客 325

C++:函数对象:Lambda:Lambda详解(三):STL算法库中使用

C++:函数对象:Lambda:Lambda详解(三)

C++ JAVA的专栏 1528

MPU6050 加速度计和陀螺仪传感器与 Arduino 的接口

虽然该模型并不能准确代表现实世界中加速度计传感器的构建方式,但它通常有助于理解为什么加速度计的输出信号通常以 ±g 为单位指定,或者为什么加速度计在静止时在 z 轴上的读数为 1g,或者在不同方向上您可以期望得到什么样的加速度计读数。该模块的核心是低功耗、低成本的 6 轴运动跟踪芯片 MPU6050,它将 3 轴陀螺仪、3 轴加速度计和数字运动处理器 (DMP) 集成到一个 4mm x 4mm 的微型芯片中。小时候,科学博览会上的陀螺仪总是让我们感到惊讶,因为它们以奇怪的方式移动,甚至似乎违背了重力。

sxstj的博客 9934

STL,Sort自定义排序

STL排序,sort排序

weixin_62599885的博客 966

深入学习FIFO

深入理解FIFO、同步FIFO和异步FIFO、FIFO设计的难点以及FIFO深度计算

好好学习,天天向上 2651

本科双非的计算机考研择校注意点——经验贴

一战一志愿上岸某211的电子信息专硕。之前在某乎也发过帖子。但现在用优快云,所以把相关的心得再发出来仅供大家参考。 首先,我认为最重要的是你为什么要考研? 不管你是为了混一个文凭将来好进大厂,还是为了真正搞学术或者学知识,你要知道你自己的目标,只有坚定自己的目标,才有动力去走完这段复习的历程。真正的考研,是很苦的。如果你是为了逃避大四面临的就业才选择考研,并且还浑浑噩噩不当回事,那我劝你放弃,不如踏踏实实学点技术去找实习。那从我自己出发,我是认为自己本科双非院校且自己四年间没有学到什么专业方面的技能,

m0_56698268的博客 3166

STL排序一览以及 Lambda表达式

1、首先介绍lambda表达式:C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数完整声明格式如下:[capture list] (params list) mutable exception-&gt; return type { function body }capture list:捕获外部变量列表params list:形参列表mutabl...

qq_24950821的博客 3843

时序异常检测汇总

时序异常检测

Mark_Australia的博客 1万+

C++ .sort()重载

C++ .sort()重载 头文件 #include<algorithm> .sort()函数参数 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); // first:要排序的数组的起始地址; // last:要排序的数组的结束地址; // comp:排序的方法,默认是从小到大 - 升序; 实例 // *** 实例1:自定义cmp实现从大到小排序 *** #inclu

m0_56077202的博客 2366

【eclipse】win 10:eclipse 4.9 下载、安装和汉化(支持中英切换)

目录 一、eclipse下载 二、eclipse安装 三、eclipse在线汉化 四、eclipse离线汉化(推荐) 一、eclipse下载 ①官网下载地址(收费):https://www.eclipse.org/downloads/点击前往下载 ②【推荐】我的百度网盘下载地址(包括离线汉化包):点击下载 提取码:0nfw ③eclipse4.9其他地址下载:http...

顾三殇 —— 博客空间(软件测试) 1万+

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 103

sort与结构体中的运算符重载

C++中重载小于号,通常是为了使用STL的算法。 举个最为简单的例子,排序。 std::sort排序是基于大小顺序的,基本类型之间就存在大小于的关系, 排序就是按照从小到大的顺序调整序列。 在结构体中,因为这个结构体类型是你自己定义的,计算机并不知道<是根据什么来比较大小的,如果你要这样用 node a,b; a<b; 就得让计算机知道当 <左右两边是node类型的值的时候,是根据什么逻辑来返回值的,比如1<3这个是根据实数的大小来返回真假。 重载运算符的格式如下: boo.

nyf1007的博客 2210

Android12 适配 usb 触屏

在 Android 系统中,输入设备 IDC(Input Device Configuration)设备描述文件(.idc)是用于配置和定义输入设备行为和属性的文本文件。 该文件通常在`/system/usr/idc/` 或 `/vendor/usr/idc/`,具体位置因芯片厂商SDK而异。一般情况此类文件是预置到系统,开发者 root 权限才能修改这些文件。输入设备 IDC 设备描述文件在 Android 系统中起到了识别、配置、映射和定制输入设备的作用,使得系统能够准确解析和处理各种输入设备的事件,提

weixin_35723192的博客 1235

C++应用系列:STL中sort函数与自定义cmp比较排序

平常使用时,在写sort函数的比较函数时,通常都是: bool cmp(int i1,int i2){ return i1 &lt; i2; } void foo(){ sort(vec.begin(),vec.end(),cmp); } 习惯用法后,在一些类中,同样这样写就出现了错误。 class InClass{ bool cmp(int i1,int i2){ ...

uestc_chenmo的博客 4115

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++

**一、如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、 **unordered_map、unordered_set、auto 如果想要在Dev-Cpp里面使用C++11特性的函数,比如刷算法中常用的stoi、to_string、unordered_map、unordered_set、auto这些,需要在设置里面让dev支持c++11~需要这样做~ 在工具-编译选项-...

weixin_43719397的博客 526

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Sort函数的应用

Sort是C++std中含有的函数,而C语言中并没有。 因此不仅需要头文件 #include<iostream> 和 #include<cstdio> 还需要 #include<algorithm>(Sort的头文件) sort(a,a+n,cmp)含有三个参数,第一个参数是起始地址,第二个参数是末地址;这两个地址一般是数组(包括结构体数组)。 其表示对[a,a+n)区间内的元素以cmp的方式进行排序,注意是左闭右开。 若对整个数组进行排序则n就等于数组长

XiaoYao1217的博客 1132

ACM常用C++函数和stl总结

自己对ACM中常用和不常用的函数和stl的简单总结,常不常用有标注

hao_6_6的博客 9632

C++ 排序函数 sort(),qsort()的用法

想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表:     函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序

zzzmmmkkk的专栏 44万+

C++ STL sort 函数的用法(自定义排序函数)

sort 在 STL 库中是排序函数,有时冒泡、选择等O(n2)O(n2)算法会超时时,我们可以使用 STL 中的快速排序函数O(nlogn)O(nlogn)完成排序 sort 在 algorithm 库里面,原型如下: template <class RandomAccessIterator> void sort ( RandomAccessIterator ...

积累点滴,保持自我 8209

STL教程:C++ STL快速入门

1.STL引言 STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列...

梦心之魂的博客 1万+

sort函数

STL中的sort函数使用几个小例子。

杰哥的专栏 978

STL sort函数的用法

sort在STL库中是排序函数,有时冒泡、选择等O(N^2)算法会超时时,我们可以使用STL中的快速排序O(N log N)完成排序 他有两种形式一个有三个参数,一个有两个参数,我们先讲讲两个参数的吧! sort的前两个参数是起始地址和中止地址 如:sort(a,a+n) 表示对a[0] a[1] a[2] ... a[n-1] 排序 代码如下: #include <algori...

gzcszzx 229

C++之sort()函数详解,刷题必备~

顾名思义,sort就是用来排序的函数,它根据具体情形使用不同的排序方法,效率较高。可以看到,sort的参数有三个,其中前两个是必填的,而比较函数则可以根据需要填写,如果不写比较函数,则默认对前面给出的区间进行递增排序。这样就可以让数值大的元素在前面,即降序排列,对于double,char亦如此,把cmp内传入参数的类型改变一下就好了。

Adae_Stevens的博客 2万+

C++:STL中sort()函数的用法总结

借鉴: http://blog.youkuaiyun.com/appte/article/details/8253930。 http://blog.youkuaiyun.com/csust_acm/article/details/7326418。 在做ACM题的过程中,算法中经常会用到排序的处理,自己写排序有点麻烦,最主要是记不住排序算法的代码。。。 STL中sort()函数的用法,所以就取巧适用STL中的sort函数,这个省心又放心,只需要包含头文件就可以了,这里总结一下用法以作备忘。 STL中的sort函数有两种: templ

rjszcb的博客 1055

c语言sort_剑指信奥 C++ 之 STL 算法 sort

趣乐博思剑指信奥 C++ 系列趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案。开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详解等系列课程。面向10 - 16 岁少儿的编程教育,培养扎实的 C++ 语言基础,灵活运用算法的能力,分析解决问题的能力。剑指信奥 |C++ 之 STL 算法 sort先来后到,无处不在...

weixin_39707941的博客 187

C++STL梳理

尽管不同容器对应着不同类别的迭代器,但这些迭代器有着较为统一的定义方式,具体分为 4 种,如表 1 所示。表 2 迭代器的 4 种定义方式迭代器定义方式具体格式正向迭代器容器类名::iterator 迭代器名;常量正向迭代器容器类名::const_iterator 迭代器名;反向迭代器容器类名::reverse_iterator 迭代器名;常量反向迭代器容器类名::const_reverse_iterator 迭代器名;

mijichui2153的博客 1788

【C++】STL -- 仿函数的定义与使用

本篇文章主要讲解仿函数的概念及其使用

L_0907的博客 458
上一篇: c++优先队列的用法 (priority_queue)
下一篇: 【C++匿名函数】Lambda函数的用法详解
Andy in boots
博客等级 码龄7年 73粉丝 69原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值