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;
    }
}
相关文章
|
9月前
|
算法 测试技术 C++
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
|
25天前
|
移动开发 C++
【洛谷 P1157】组合的输出 题解(深度优先搜索+枚举子集)
该问题要求编程输出从1到n中选择r个元素的所有组合,组合按字典序排列。输入包含两自然数n和r(1&lt;n&lt;21, 0≤r≤n)。输出每个组合时,每个数字占据3个字符宽度。提供的AC代码使用C++,通过递归搜索方法枚举子集。样例输入为5 3,输出显示所有3个元素的组合。
13 0
|
2月前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
2月前
|
算法 测试技术 C#
二分查找|差分数组|LeetCode2251:花期内花的数目
二分查找|差分数组|LeetCode2251:花期内花的数目
|
算法 安全 Swift
LeetCode - #60 排列序列
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
机器学习/深度学习 算法
leetcode-1833. 雪糕的最大数量(排序+贪心)
• 时间复杂度:O(n logn) 其中n 是数组 costs 的长度,对数组排序所需要的时间是O(n logn),遍历数组需要O(n)的时间,以上时间取最长则是O(n logn)
53 0
leetcode-1833. 雪糕的最大数量(排序+贪心)