C++ vector数组实现多级排序—使用sort()函数

2023-05-16

之前有记录过 python 使用 numpy 的多级排序方法:

numpy 多级排序 :lexsort 函数详解_地球被支点撬走啦的博客-CSDN博客_lexsort

C++ 多级排序可以借用 sort() 函数(在头文件 <algorithm> 中)的第三个参数实现。

比如实现一个 6*3 的 vector 数组的多级升序排序(三级)的话,可以首先编写下面这个逻辑比较规则函数:

// 升序多级排序,此时的判断条件是 < 号
bool my_compare(vector<int> a, vector<int> b)
{
    if(a[0] != b[0]) return a[0] < b[0];   // 第一级比较
    else
    {
        if(a[1]!=b[1]) return a[1] < b[1]; // 如果第一级相同,比较第二级
        else return a[2] < b[2];           // 如果第二级仍相同,比较第三级
    }
}

如果想实现降序排序,将函数中的 < 号改为 > 号即可。

将该函数名作为 sort() 的第三个参数传入即可,使用方式如下:

int main()
{
    vector<vector<int>> arr = {{3, 6, 3}, 
                               {6, 0, 9}, 
                               {3, 2, 5}, 
                               {7, 9, 6}, 
                               {7, 3, 3}, 
                               {3, 2, 1}};
    sort(arr.begin(), arr.end(), my_compare);
    for(auto e : arr)
    {
        for(auto i:e) cout << i << " ";
        cout << endl;
    }
    return 0;
}
/* 输出 *
3 2 1 
3 2 5
3 6 3
6 0 9
7 3 3
7 9 6
*********/

注意:

如果是在类中定义逻辑比较函数,需要在将函数声明为 static 类型,否则会报如下错误:

error: reference to non-static member function must be called

原因是:sort() 函数的第三个参数代表的函数的参数列表中不允许有指针参数,而类中如果成员函数没有声明为static,C++会默认给成员函数添加一个this指针。对于本例就是类似下面这样的:

bool my_compare(ClassName *this, vector<int> a, vector<int> b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ vector数组实现多级排序—使用sort()函数 的相关文章

随机推荐

  • docker 导入导出容器

    将 容器的文件系统 保存到tar包 docker export是将 容器的文件系统 导出为一个tar包 注意是操作的对象是容器 xff01 它的具体语法如下 xff1a docker export OPTIONS CONTAINER 其中
  • docker 删除镜像

    删除镜像 如果要删除本地的镜像 xff0c 可以使用 docker rmi xff08 注意rm为删除容器 xff0c 而rmi为删除镜像 xff0c 其中i代表image xff09 命令 xff0c 它的具体语法如下 xff1a doc
  • docker 构建私有Registry、私人仓库

    1 使用docker tag给busybox加上一个标签localhost 5000 busybox latest xff1b docker tag busybox localhost span class token operator s
  • mall在linux环境下的部署(基于docker容器)

    mall在docker容器下部署涉及到MySQL Redis Nginx RabbitMQ MongoDB Elasticsearch Logstash Kibana xff0c 以及Spring Boot应用部署 本人事先已经拉取过镜像了
  • docker拉取镜像速度很慢的解决方法

    将docker修改为国内镜像源 在 etc docker daemon json文件中添加下面参数 xff0c 文件不存在的话创建即可 此处使用的是中国科技大学的docker镜像源 span class token punctuation
  • 解决您的qq.exe已在防护中,链接无法打开的问题

    适用于联想电脑 出现以上情况是由于默认了联想自带的浏览器打开QQ的链接 xff0c 如果不是直接点击的话可以复制到浏览器打开 xff0c 以下内容是方便直接QQ打开链接 问题如图 xff1a 解决方法 打开联想浏览器 设置 智能实验室 管理
  • ubunut16.04 kinetic版本gazebo7升级为gazebo9(完美解决!!!)

    问题 xff1a 我们加载gazebo7发现启动rourun节点有关摄像头的画面加载不出来 xff0c 往往是黑屏或者卡顿中断gazebo 原因 xff1a Gazebo版本太低造成的 因此 xff0c 需要对此升级 Kinetic中的默认
  • 【Java】Java对象的上转型对象与下转型

    Java对象的上转型对象与下转型 1 解释说明2 代码示例2 1 示例一2 2 示例二 3 强制对象类型转换 将一个类型强制转换成另一个类型的过程被称为类型转换 本节所说的对象类型转换 xff0c 是指存在继承关系的对象 xff0c 不是任
  • 虚拟机/云服务器安装docker

    本文基于腾讯云服务器CentOS7 6版本 一 操作步骤 提示 xff1a 执行whoami命令可以查看当前账户 xff0c 如果不是管理员 xff0c 所有命令需要加上sudo 如果需要切换账户 xff0c 可以使用命令 su root
  • Linux SocketCAN 编程(C++,启用多线程接收)

    目录 1 使用指令设置can参数 2 使用 socket 函数创建一个 socketcan 套接字 3 使用 ioctl 函数 将套接字与 can 设备绑定 4 使用 setsockopt 函数设置过滤规则 xff08 接收滤波器 xff0
  • CentOS 7 配置 VNC 服务(单用户单界面)

    CentOS 7 配置 VNC 服务 xff1a 前提图形界面已安装 安装图形仅供参与不同版命令有些区别 yum check update yum groupinstall 34 X Window System 34 yum install
  • CentOS禁止root登录ssh

    为什么要禁止root登录ssh xff0c 为了安全 添加一个用户 为了禁止root登录时候登录的账号密码 useradd admin passwd admin 然后输入两次密码 xff0c 提示的信息可忽略 修改文件sshd config
  • C++复习题(面向对象程序设计)

    C 43 43 复习题 xff08 面向对象程序设计 xff09 一 选择题 C 43 43 语言属于 C A xff09 自然语言 B xff09 机器语言 C xff09 面向对象语言 D xff09 汇编语言下面选项中不属于面向对象程
  • PWM控制直流电机(单片机实验)

    PWM控制直流电机 xff08 单片机实验 xff09 有问题欢迎私信哦 一 题目 设计电路 xff0c 使用定时器实现PWM对直流电机的转速控制 xff0c 并且实现按键切换转动方向 并进行软件仿真 xff0c 做出实物 二 基本要求 1
  • 模拟ATM机存取款管理系统设计(C++)

    模拟ATM机存取款管理系统设计 有问题欢迎私信哦 1 1问题描述 xff1a 模拟银行自动存取款机使用过程中的界面和用户交互过程 xff0c 实现查询银行卡余额 取款 修改密码 退出系统等功能 1 2基本要求 xff08 功能要求 xff0
  • 蒙牛伊利静悄悄,为什么牛奶的标准这么低,还能喝吗

    蒙牛伊利静悄悄 xff0c 为什么牛奶的标准这么低 xff0c 还能喝吗 中国的食品问题 xff0c 可能是最容易牵动国人关注焦点的大事 从苏丹红到三聚氰胺 xff0c 历年都有各种大大小小的食品安全事件见诸报端 要不是前段时间湖南郴州大头
  • 基于嵌入式技术的智能灌溉系统设计与实现

    基于嵌入式技术的智能灌溉系统设计与实现 基于嵌入式技术的智能灌溉系统设计与实现 基于cortex A9处理器实验平台 xff0c 实现对种植农作物 蔬菜 果树等的土壤温湿度及光照进行远程或本地监测 xff0c 同时对泵的开关进行控制 1 目
  • 程序员(尤其是零项目经验的程序员)找工作

    程序员 xff08 尤其是零项目经验的程序员 xff09 找工作 谈到程序员 xff08 尤其是零项目经验的程序员 xff09 找工作 xff0c 培训班是个不可回避的讨论热点 虽然本人也做过兼职Java培训老师 xff0c 多少了解些培训
  • 非全日制计算机考研有哪些性价比高的院校呢?

    非全日制计算机考研有哪些性价比高的院校呢 xff1f 附 xff1a 各大高校专业课资料整理可以看一下我的博客主页上传的资源哦 xff01 感谢关注 xff0c 点赞 xff0c 评论 计算机行业的非全日制研究生院校 xff0c 大都包含大
  • C++ vector数组实现多级排序—使用sort()函数

    之前有记录过 python 使用 numpy 的多级排序方法 xff1a numpy 多级排序 xff1a lexsort 函数详解 地球被支点撬走啦的博客 CSDN博客 lexsort C 43 43 多级排序可以借用 sort 函数 x