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;
    }
}
相关文章
|
17小时前
【题型总结】动态规划之按照某种形式分割数组以获得最值
【题型总结】动态规划之按照某种形式分割数组以获得最值
40 0
|
17小时前
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
【每日一题Day340】LC2251花期内花的数目 | 差分+哈希表+排序 排序+二分查找
23 0
|
17小时前
|
算法 测试技术 C#
二分查找|差分数组|LeetCode2251:花期内花的数目
二分查找|差分数组|LeetCode2251:花期内花的数目
|
9月前
|
人工智能 BI
牛客 序列排列1
牛客 序列排列1
41 0
|
8月前
|
算法 Java
【算法题目解析】杨氏矩阵数字查找
一道面试时可能遇到的算法问题,杨氏矩阵。可以重点关注思考方式,而不是死记硬背。
23 0
|
10月前
|
移动开发 算法
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
75 0
|
11月前
|
算法 安全 Swift
LeetCode - #60 排列序列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
11月前
|
算法 Java C++
最长上升序列模型 acwing 1016.最大上升子序列和
最长上升序列模型 acwing 1016.最大上升子序列和
34 0
|
11月前
|
算法 Java C++
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
35 0
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和