c++中多种类型sort()排序的用法(数组、结构体、pair、vector)

c++中多种类型sort排序的用法

  • 一、对数组排序
    • 1、默认排序
    • 2、自定义排序
  • 二、对结构体进行排序
  • 三、对pair进行排序
    • 1、默认排序
    • 2、自定义排序
  • 四、对vector进行排序
    • 1、默认排序
    • 2、去重排序
    • 3、自定义排序

一、对数组排序

1、默认排序

默认从小到大进行排序

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;int main()
{int n;cin>>n;int a[maxsize];for(int i=0;i<n;i++) cin>>a[i];//默认从小到大排序sort(a,a+n); for(int i=0;i<n;i++) cout<<a[i];return 0;
}

2、自定义排序

写一个自定义排序的函数,必须为bool型

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;bool cmp(int x,int y)//数组内的数据是什么类型,传入的参数就是什么类型
{//对数组进行从大到小排序return x>y;
}int main()
{int n;cin>>n;int a[maxsize];for(int i=0;i<n;i++) cin>>a[i];//默认从小到大排序sort(a,a+n,cmp); for(int i=0;i<n;i++) cout<<a[i]<<" ";return 0;
}

二、对结构体进行排序

对结构体进行排序一般都需要自定义函数

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;struct Node
{int data;int number[3];
}cnt[maxsize];bool cmp(Node x,Node y)//传入的参数是结构体的类型
{//对结构体中的number的和进行从大到小排序int sum1=x.number[0]+x.number[1]+x.number[2];int sum2=y.number[0]+y.number[1]+y.number[2];return sum1>sum2;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>cnt[i].number[0]>>cnt[i].number[1]>>cnt[i].number[2];//自定义排序,传入定义的函数sort(cnt,cnt+n,cmp); return 0;
}

三、对pair进行排序

1、默认排序

默认对first从小到大排序,当first相同时对second进行从小到大排序

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;pair <int,int> num[maxsize];int main()
{int n;cin>>n;for(int i=0;i<n;i++) cin>>num[i].first>>num[i].second;//默认排序sort(num,num+n);for(int i=0;i<n;i++) cout<<num[i].first<<" "<<num[i].second<<endl; return 0;
}

2、自定义排序

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;pair <int,int> num[maxsize];bool cmp(pair<int,int> x,pair<int,int> y)
{//对first进行从大到小排列return x.first>y.first;
}int main()
{int n;cin>>n;for(int i=0;i<n;i++) cin>>num[i].first>>num[i].second;//默认排序sort(num,num+n,cmp);for(int i=0;i<n;i++) cout<<num[i].first<<" "<<num[i].second<<endl; return 0;
}

四、对vector进行排序

vector只能存储一组相同类型的元素

1、默认排序

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//默认排序,从小到大sort(vec.begin(),vec.end());for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}

2、去重排序

去除数组中重复的元素

在这里插入图片描述

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//去除重复元素sort(vec.begin(),vec.end());auto last=unique(vec.begin(),vec.end());vec.erase(last,vec.end());for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}

3、自定义排序

#include <bits/stdc++.h>
#define maxsize 100
using namespace std;vector <int> vec; bool cmp(int a,int b)
{return a>b;
}int main()
{int n;cin>>n;int num;for(int i=0;i<n;i++){cin>>num;vec.push_back(num);}//自定义排序,从大到小sort(vec.begin(),vec.end(),cmp);for(auto it=vec.begin();it !=vec.end();it++){cout<<*it<<" ";}return 0;
}

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:拖拽控制)

设置组件是否可以响应拖拽事件。 说明&#xff1a; 从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 ArkUI框架对以下组件实现了默认的拖拽能力&#xff0c;支持对数据的拖出或拖入响应&#xff0c;开发者只需要将这些组件…

Xcode 15 适配 MonkeyDev

升级到Xcode15后,使用Xcode创建MonkeyApp后,运行会报错,本篇文章主要讲述此过程遇到的错误和解决办法。 问题1:找不到libc++.dylib文件 问题描述: Build input files cannot be found: /usr/lib/libstdc++.dylib, /usr/lib/libc++.dylib. Did you forget to declare th…

DHCP自动获取IP地址实验(华为)

思科设备参考&#xff1a;DHCP自动获取IP地址实验&#xff08;思科&#xff09; 一&#xff0c;实验目的 路由器搭载DHCP&#xff0c;让PC通过DHCP自动获取IP地址 二&#xff0c;不划分vlan--全局地址池 实验拓扑 配置命令 Router <Huawei>system-view [Huawei]ip po…

瑞_Redis_短信登录(一)

文章目录 项目介绍1 短信登录1.1 项目准备1.1.1 导入SQL1.1.2 导入后端项目1.1.3 导入前端项目 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识&#xff0c;所以本系…

LLM春招,搜广推,nlp(2)

Encoder和Decoder怎么交互的 decoder里面的K&#xff0c;V输入用的是encoder的输出&#xff0c;并不是共享了K, V参数&#xff0c;decoder每层的参数都是独立的。Decoder每层是有两块Attention的&#xff1a;一块是正常的Self-Attention&#xff0c;QKV的输入都来自Decoder上一…

docker单节点搭建在线商城

本文档使用到的软件包以上传到资源中 目录 1. 创建容器并配置基础内容 1.1 将gpmall-repo上传到容器中 1.2 添加yum源 2. 安装基础服务 2.1 安装JAVA环境 2.2 安装Redis缓存服务 2.3 安装Elasticsearch服务 2.4 安装Nginx服务 2.5 安装MariaDB数据库 2.6 安…

C++核心编程之内存分区模型,引用,函数提高

1&#xff0c;类型分区模型 c程序在执行中&#xff0c;将内存大方向划分为4个区域 1&#xff0c;代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的 2&#xff0c;全局区&#xff1a;存放全局变量和静态变量以及常量 3&#xff0c;栈区&#xff1…

Spring框架的优点

Spring框架是一个开放源代码的J2EE应用程序框架&#xff0c;是针对bean的生命周期进行管理的轻量级容器。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题&#xff0c;提供了功能强大的IOC、AOP及Web MVC等功能。 轻量级&#xff1a;相对于EJB框架而言。 Spring 体系结…

Windows安装SSH教程

Windows安装SSH教程 一、SSH1.SSH简介2.SSH功能3.SSH验证3.1 第一种级别&#xff08;基于口令的安全验证&#xff09;3.2 第二种级别&#xff08;基于密匙的安全验证&#xff09; 4.SSH层次4.1 传输层协议 [SSH-TRANS]4.2 用户认证协议 [SSH-USERAUTH]4.3 连接协议 [SSH-CONNEC…

node-day3-es6模块化+webpack

模块化 一、模块化分类 回顾node.js模块化&#xff1a; node.js遵循了CommonJS的模块化规范【见下文】&#xff0c;其中&#xff1a; 1.导入其它模块使用require()方法 2.模块对外共享成员使用module.exports对象 模块化的好处&#xff1a; 大家都遵守同样的模块化规范写代…

【学习笔记】开源计算机视觉库OPENCV学习方案

本文中&#xff0c;我们试图提供一些学习OpenCV的详细和实用资源&#xff0c;这些资源包括基础知识、进阶技巧以及实践项目&#xff0c;旨在帮助初学者和进阶学习者更好地掌握和使用OpenCV库。 一、学习资源 官方文档&#xff1a;OpenCV的官方文档是学习OpenCV的最佳起点。它包…

向量数据库Chroma教程

引言 随着大模型的崛起,数据的海洋愈发浩渺无垠。受限于token的数量,无数的开发者们如同勇敢的航海家,开始在茫茫数据之海中探寻新的路径。他们选择了将浩如烟海的知识、新闻、文献、语料等,通过嵌入算法(embedding)的神秘力量,转化为向量数据,存储在神秘的Chroma向量…

飞书云文档API操作详细介绍

1.场景分析 公司内部很多文档都是由多人进行维护的&#xff0c;随时发生变更&#xff0c;因此在利用这些数据的时候就需要直接读取云文档的数据&#xff0c;从而执行下一步动作。团队云文档api执行权限一般需要管理员审核才能使用。如果你就是管理员&#xff0c;那么恭喜你&am…

【DIY】钱包的“电子卫士”的制作

一、工作原理 钱包的“电子卫士”电路如图1所示&#xff0c;其核心元件是微型蜂鸣器专用音响集成电路A&#xff0c;它与压电陶瓷蜂鸣片B、电池G等组成了一个体积小巧、发声响亮的简易蜂鸣器。 平时&#xff0c;钱包通过尼龙线与插头XP相接&#xff0c;而XP插入插孔XS内&#x…

AndroidUI--setContentView

我们的Activity通常继承自Activity或者AppCompatActivity&#xff0c;这两个setContentView流程是不同的 一、继承自Activity 1、Activity.setContentView Activity中setContentVIew调用了getWindow().setContentView(view, params); getWindow返回的是mWindow&#xff0c;mWi…

RedisDesktopManager连接Ubuntu的Redis失败解决办法

配置redis 1.设置redis在后台服务&#xff0c;修改配置文件 默认情况下是 no ,修改为yes&#xff0c;可以后台服务 2、设置redis端口&#xff0c;默认端口是6379&#xff0c;可以根据自己的需要&#xff0c;找到/et/redis/redis.conf文件, 修改port 3、设置密码 配置文件中…

ubuntu20.04“E: 软件包 vim 没有可安装候选”“/etc/apt/sources.list:7 中被配置了多次”解决方法

问题一&#xff1a;ubuntu20.04安装vim时提示“E: 软件包 vim 没有可安装候选” **解决&#xff1a;**更换下载&#xff0c;比如我原先使用的是清华源&#xff0c;后切换成阿里云源&#xff0c;ubuntu直接在“软件和更新”切换 问题一解决。 问题二&#xff1a;ubuntu20.04提…

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc

本文旨在设计一款基于Java技术的教学仪器设备销售网站&#xff0c;以提高网站性能、功能完善、用户体验等方面的优势&#xff0c;解决现有教学仪器设备销售网站的问题&#xff0c;并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…

华为昇腾系列——入门学习

概述 昇腾&#xff08;Ascend&#xff09;是华为推出的人工智能处理器品牌&#xff0c;其系列产品包括昇腾910和昇腾310芯片等。 生态情况 众所周知&#xff0c;华为昇腾存在的意义就是替代英伟达的GPU。从事AI开发的小伙伴&#xff0c;应该明白这个替代&#xff0c;不仅仅是…

【自动驾驶坐标系基础】Frenet坐标系和Cartesian坐标系的相互转换

Frenet坐标系和Cartesian坐标系的相互转换 2023.12.12 1 变量含义 Frenet和Cartesian相互转换即 [ s , s ˙ , s , d , d ˙ , d ] ↔ [ X , θ x , κ x , v x , a x ] [s,\dot{s},\ddot{s},d,\dot{d},\ddot{d}] \leftrightarrow[\boldsymbol{X},\theta_x,\kappa_x,v_x,a_…