当前位置: 首页 > article >正文

对元素为 pair 的数组的各元素进行排序的方法

【知识点】
● 按结构体某一字段对结构体数组进行排序
https://blog.csdn.net/hnjzsyjyj/article/details/120184972
据此知识点,则可构建 pair 元素数组的自定义排序代码如下所示。

typedef pair<int,int> PII;

int up(PII u,PII v) { //ascending by first
    if(u.first==v.first) return u.second<v.second; //If equal,ascending by second
    return u.first<v.first;
}

int down(PII u,PII v) { //descending by first
    if(u.first==v.first) return u.second>v.second; //If equal,descending by second
    return u.first>v.first;
}

● 对元素为 pair 的数组的各元素进行排序的方法
方法一:构建一个包含 n 个 pair 元素的静态数组 v,然后调用 sort(v,v+n); 排序。此方法默认按 pair 数组元素的 first 域进行非递减排序。若 first 域相同,则按 pair 数组元素的 second 域进行非递减排序。

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
typedef pair<int,int> PII;
PII v[maxn];

int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        cin>>v[i].first>>v[i].second;
    }
    sort(v,v+n);
    for(int i=0; i<n; i++) {
        cout<<v[i].first<<" "<<v[i].second<<endl;
    }
    return 0;
}

/*
in:
5
5 8
3 1
2 9
1 6
5 3

out:
1 6
2 9
3 1
5 3
5 8
*/

针对方法一,若拟按 pair 数组元素的 first 域进行非递增排序,且若 first 域相同,则按 pair 数组元素的 second 域进行非递增排序的代码如下所示。

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
typedef pair<int,int> PII;
PII v[maxn];

int up(PII u,PII v) { //ascending by first
    if(u.first==v.first) return u.second<v.second; //If equal,ascending by second
    return u.first<v.first;
}

int down(PII u,PII v) { //descending by first
    if(u.first==v.first) return u.second>v.second; //If equal,descending by second
    return u.first>v.first;
}

int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        cin>>v[i].first>>v[i].second;
    }
    sort(v,v+n,down);
    for(int i=0; i<n; i++) {
        cout<<v[i].first<<" "<<v[i].second<<endl;
    }
    return 0;
}

/*
in:
5
5 3
1 6
3 1
2 9
5 8

out:
5 8
5 3
3 1
2 9
1 6
*/

方法二:构建一个包含 n 个 pair 元素的动态数组 v,然后调用 sort(v.begin(),v.end()); 排序。此方法默认按 pair 数组元素的 first 域进行非递减排序。若 first 域相同,则按 pair 数组元素的 second 域进行非递减排序。

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
typedef pair<int,int> PII;
vector<PII> v;

int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        int x,y;
        cin>>x>>y;
        v.push_back({x,y});
    }
    sort(v.begin(),v.end());
    for(int i=0; i<n; i++) {
        cout<<v[i].first<<" "<<v[i].second<<endl;
    }
    return 0;
}

/*
in:
5
5 8
3 1
2 9
1 6
5 3

out:
1 6
2 9
3 1
5 3
5 8
*/

针对方法二,若拟按 pair 数组元素的 first 域进行非递增排序,且若 first 域相同,则按 pair 数组元素的 second 域进行非递增排序的代码如下所示。

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
typedef pair<int,int> PII;
vector<PII> v;

int up(PII u,PII v) { //ascending by first
    if(u.first==v.first) return u.second<v.second; //If equal,ascending by second
    return u.first<v.first;
}

int down(PII u,PII v) { //descending by first
    if(u.first==v.first) return u.second>v.second; //If equal,descending by second
    return u.first>v.first;
}

int main() {
    int n;
    cin>>n;
    for(int i=0; i<n; i++) {
        int x,y;
        cin>>x>>y;
        v.push_back({x,y});
    }
    sort(v.begin(),v.end(),down);
    for(int i=0; i<n; i++) {
        cout<<v[i].first<<" "<<v[i].second<<endl;
    }
    return 0;
}

/*
in:
5
5 3
1 6
3 1
2 9
5 8

out:
5 8
5 3
3 1
2 9
1 6
*/


【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/143719009
https://blog.csdn.net/hnjzsyjyj/article/details/143686676
https://blog.csdn.net/hnjzsyjyj/article/details/143720177
https://blog.csdn.net/qq_40618919/article/details/124388676
https://blog.csdn.net/yzu_120702117/article/details/29249527



 


http://www.kler.cn/a/409214.html

相关文章:

  • Java基础-Java多线程机制
  • 汽车HiL测试:利用TS-GNSS模拟器掌握硬件性能的仿真艺术
  • 图片生成视频-右进
  • 数据集-目标检测系列- 花卉 玫瑰 检测数据集 rose >> DataBall
  • 《图像梯度与常见算子全解析:原理、用法及效果展示》
  • 知乎日报——第二周
  • 基于之前的秒杀功能的优化(包括Sentinel在SpringBoot中的简单应用)
  • 学习记录:js算法(一百零二):使用最小花费爬楼梯
  • 9.10Ubuntu网络编程环境配置,已解决
  • 力扣 41. 缺失的第一个正数
  • 【tomcat】tomcat的默认配置
  • 【Linux】详解shell代码实现(上)
  • postman 调用 下载接口(download)使用默认名称(response.txt 或随机名称)
  • A045-基于spring boot的个人博客系统的设计与实现
  • 数据结构 ——— 希尔排序算法的实现
  • 鸿蒙NEXT开发案例:二维码的生成与识别
  • Redis核心数据结构与高性能原理
  • LLM的原理理解6-10:6、前馈步骤7、使用向量运算进行前馈网络的推理8、注意力层和前馈层有不同的功能9、语言模型的训练方式10、GPT-3的惊人性能
  • leetcode 面试150之 156.LUR 缓存
  • c++中mystring运算符重载
  • 韩顺平 一周学会Linux | Linux 实操篇-实用指令
  • Python知识点精汇:集合篇精解!
  • 【大数据技术与开发实训】携程景点在线评论分析
  • HTMLCSS:翻书加载效果
  • 解!决!vscode!Path Intellisense 失效!不起作用问题!!
  • 机器学习实战笔记34-38:gridsearchcv的进阶使用,无监督学习:kmeans、DBSCAN