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;
    }
}
相关文章
|
6月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
6月前
【题型总结】动态规划之按照某种形式分割数组以获得最值
【题型总结】动态规划之按照某种形式分割数组以获得最值
75 0
|
5月前
|
C++
【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)
该题目要求在一个单调不减的整数序列中查找特定数值首次出现的位置,输入包含序列长度、查询次数及数值,输出对应位置或-1。给定样例输入为11个数和3次查询,输出分别为1、2和-1。代码使用C++,通过二分查找优化效率,适应大数据量。
41 0
|
1月前
|
算法
AcWing 1360. 有序分数(每日一题)
AcWing 1360. 有序分数(每日一题)
|
6月前
|
人工智能
力扣100114. 元素和最小的山形三元组 II(中等)
力扣100114. 元素和最小的山形三元组 II(中等)
|
5月前
【洛谷 P2249】【深基13.例1】查找(向量+二分查找+循环)
该题目要求在一个单调不减的整数序列中查找给定数值首次出现的位置,输出-1表示未找到。给定$n$个整数和$m$次询问,需对每个询问使用二分查找法高效解答。样例输入为11个数和3次询问,输出分别为1、2和-1。代码中定义了快速读取整数的函数`read()`,并使用二分查找`search()`实现。在主函数中,先读取序列和询问,然后对每个询问进行二分查找并输出结果。
30 0
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值
|
6月前
|
算法 测试技术 C#
二分查找|差分数组|LeetCode2251:花期内花的数目
二分查找|差分数组|LeetCode2251:花期内花的数目
|
移动开发 算法
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
DFS深度优先算法 —— AcWing 842. 排列数字AcWing 843. n-皇后问题
102 0