Acwing862. 三元组排序

简介: Acwing862. 三元组排序

题目

给定 N 个三元组 (x,y,z其中 x是整数,y是浮点数,z是字符串。

请你按照 x从小到大的顺序将这些三元组打印出来。

数据保证不同三元组的 x值互不相同。

输入格式

第一行包含整数 N。

接下来 N 行,每行包含一个整数 x,一个浮点数 y,一个字符串 z,表示一个三元组,三者之间用空格隔开。

输出格式

共 N 行,按照 x 从小到大的顺序,每行输出一个三元组。

注意,所有输入和输出的浮点数 y 均保留两位小数。

数据范围

1≤N≤10000

1≤x,y≤10^5

字符串总长度不超过10^5。

输入样例:
5
32 1.36 nsyiupnnhc
18 4.53 fmofzwrah
33 4.86 wzuymbm
1 3.93 gtnrwcebt
31 4.53 gcllxioc
输出样例:
1 3.93 gtnrwcebt
18 4.53 fmofzwrah
31 4.53 gcllxioc
32 1.36 nsyiupnnhc
33 4.86 wzuymbm

解法(C++实现):

题目分析:

数据结构角度:

对于任何一个题目,我们都要从算法和数据结构两个角度去思考。本题看到三元组,我们自然要先去思考这个三元组要如何存储。三元组有三个元素分别为int、float、string三种类型,所以它的数据结构形式非常明确——类或者结构体。因为对于cpp和c语言来说,就这两种结构能够一个元素单位去存储多个类型的元素。当然本题中选择结构题或者类都可以

算法实现角度:

本题的算法实现非常简单,就是实现一个排序算法。至于需要选择什么样的排序算法在这里我们不做考虑,因为我们想直接调用stl的内置sort函数去实现。这里自然会存在问题,那就是sort函数内部的代码实现,是直接用<号去进行排序的,那么当我们把一个结构体输入给sort函数时,它将会对两个结构体进行<号去排序,但是我们知道<并不能用于结构体,所以本题算法实现的关键就在于想到对<符号进行重载,使它能够实现结构体之间的大小比较,并且比较的决定性因素仅仅在于第一个int类型的大小。

代码实现:

#include<iostream>
#include<algorithm>//sort函数所在的库
#include<iomanip>//c++用setprecision函数保留小数位的库
using namespace std;
const int N=10001;
struct tripleClass{
    int data;
    float data2;
    string data3;
    
    bool operator<(const tripleClass& a)const{//第一个const保证右边的结构体不会被改变,输入引用 
                                              //在于结构体调用复制构造效率低下,直接引用更快。 
                             //最外面的const保证调用这个<符号的类或者结构体本身在函数中不会被改变
        return data<a.data;
    }
}a[N];//在结构体下面直接创建一个数组,其中每个元素都是该结构体
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i].data>>a[i].data2>>a[i].data3;
    }
    sort(a,a+n);//利用迭代器把结构体数组放到sort中进行排序
    for(int i=0;i<n;i++){
        cout<<fixed<<setprecision(2)<<a[i].data<<" "<<a[i].data2<<" "<<a[i].data3<<endl;
    }
}
相关文章
|
运维 监控 安全
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
450 0
QGS
(linux-x86-arm)银河麒麟V10安装ToDesk远程控制
记(linux-x86-arm)银河麒麟V10安装ToDesk远程控制
QGS
4993 0
(linux-x86-arm)银河麒麟V10安装ToDesk远程控制
|
27天前
|
人工智能 算法 搜索推荐
优化RAG检索:别只关注模型,关键在于这三方面!
本文从测试开发视角,解析RAG检索模块的五大优化方向:向量化模型、文本分块、检索参数、混合检索及知识库更新。通过建立自动化评测基线与回归验证体系,确保优化效果可量化、可追溯,让测试成为RAG系统迭代的关键支撑。
|
监控 前端开发 网络协议
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(5)-Fiddler监控面板详解
【2月更文挑战第7天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(5)-Fiddler监控面板详解 按照从上往下,从左往右的计划,今天就轮到介绍和分享Fiddler的监控面板了。监控面板主要是一些辅助标签工具栏。有了这些就会让你的会话请求和响应时刻处监控中毫无隐私可言。监控面板是fiddler最核心的功能之一。记录了来自于服务器端(webServer)的请求会话。包括页面的请求和静态文件的请求。状态面板主要显示的是会话及会话的状态。位于软件界面右边的这一大块面板,即为辅助标签 + 工具,宏哥称之为监控。
445 0
|
安全 编译器 程序员
全面解析C++11新特性:现代编程的新起点(上)
全面解析C++11新特性:现代编程的新起点
全面解析C++11新特性:现代编程的新起点(上)
|
Shell 网络安全 开发工具
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
fatal: unable to access 'https://github.com/wolfcw/libfaketime.git/': Encountered end of file
|
开发框架 安全 前端开发
实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统
实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统
351 0
|
弹性计算 Linux
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
40518 0
|
存储 缓存 NoSQL
EhCache缓存
在查询数据的时候,数据大多来自数据库,通常会基于SQL语句的方式与数据库交互,数据库一般会基于本地磁盘IO的形式将数据读取到内存,返回给Java服务端,Java服务端再将数据响应给客户端,做数据展示。
483 0

热门文章

最新文章