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

ops/2024/11/26 0:30:10/

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

typedef pair<int,int> PII;int up(PII u,PII v) { //ascending by firstif(u.first==v.first) return u.second<v.second; //If equal,ascending by secondreturn u.first<v.first;
}int down(PII u,PII v) { //descending by firstif(u.first==v.first) return u.second>v.second; //If equal,descending by secondreturn 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 3out:
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 firstif(u.first==v.first) return u.second<v.second; //If equal,ascending by secondreturn u.first<v.first;
}int down(PII u,PII v) { //descending by firstif(u.first==v.first) return u.second>v.second; //If equal,descending by secondreturn 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 8out:
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 3out:
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 firstif(u.first==v.first) return u.second<v.second; //If equal,ascending by secondreturn u.first<v.first;
}int down(PII u,PII v) { //descending by firstif(u.first==v.first) return u.second>v.second; //If equal,descending by secondreturn 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 8out:
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.ppmy.cn/ops/136712.html

相关文章

小R的随机播放顺序

问题描述 小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌&#xff0c;播放后将其从歌单中移除。如果歌单中还有歌曲&#xff0c;则会将当前第一首歌移到最后一首。这个过程会一直重复&#xff0c;直到歌单中没有任何歌曲。 例如&#xff0c;给定歌单 [5, 3, 2, 1,…

rabbitmq结合springboot配置发送消息和消费消息

在Spring Boot中集成RabbitMQ可以非常方便地实现消息的发送和接收。下面将简要介绍如何配置Spring Boot应用以使用RabbitMQ进行消息的发送与消费。 1. 添加依赖 首先&#xff0c;在你的pom.xml文件中添加Spring Boot对RabbitMQ的支持&#xff1a; <dependency><gro…

Charles抓包工具-笔记

摘要 概念&#xff1a; Charles是一款基于 HTTP 协议的代理服务器&#xff0c;通过成为电脑或者浏览器的代理&#xff0c;然后截取请求和请求结果来达到分析抓包的目的。 功能&#xff1a; Charles 是一个功能全面的抓包工具&#xff0c;适用于各种网络调试和优化场景。 它…

Linux的开发工具(二)

1.vim的基本操作 正常模式到插入模式 输入a 输入i 输入o 示例 输入iao下面的就会变成INSERT模式 插入模式到正常模式 按Esc键 正常模式到低行模式 shift&#xff1b; &#xff1a;w保存当前文件 &#xff1a;wq保存并退出 &#xff1a;q&#xff01;强制退出 2.vi…

【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)

识别逻辑 深度学习 使用了端到端的学习策略&#xff0c;直接学习从图像到检测结果的映射关系&#xff0c;自动提取特征&#xff0c;并且根据特征与特征之间的关系&#xff0c;计算出检测结果。 传统算法 则是人工提取特征&#xff0c;比如边缘特征&#xff0c;直线特征&#x…

输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目&#xff1a;输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后…

网络安全概论

一、 网络安全是一个综合性的技术。在Internet这样的环境中&#xff0c;其本身的目的就是为了提供一种开放式的交互环境&#xff0c;但是为了保护一些秘密信息&#xff0c;网络安全成为了在开放网络环境中必要的技术之一。网络安全技术是随着网络技术的进步逐步发展的。 网络安…

transform学习

知识点讲解&#xff1a; scale 是 CSS 的 transform 属性的一部分&#xff0c;用于对元素进行比例缩放。 transform: scale(sx); transform: scale(sx, sy); /* sx&#xff1a;表示元素在 水平轴&#xff08;X轴&#xff09;的缩放比例。 sy&#xff08;可选&#xff09;&a…