最近在写一个算法的时候,把一些数据存在了pair中,并且需要根据pair中first或者second的值对这些数据进行排序。比如:输入数据(1,2)、(4,2)、(3,3)、(2,1)根据first的值大小进行升序排序,输出(1,2)、(2,1)、(3,3)、(4,2)。
经过思索之后得到的实现方法如下:
首先将这些数据存在vector数组中,vector<pair<int,int>>vec;
然后使用sort函数对数组进行排序,这里就涉及到了sort函数的使用了。
下面是sort函数使用方法
函数声明:

template <class RandomAccessIterator>
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last ); template <class RandomAccessIterator, class Compare>
void stable_sort ( RandomAccessIterator first, RandomAccessIterator last,
Compare comp );

参数解释:
(1)第一个是要排序的数组的起始地址。
(2)第二个是结束的地址(最后一位要排序的地址的下一地址)。
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
我们可以根据自己的需求自定义第三个参数cmp函数,比如若要对整型数组降序排序,则可以这样来写cmp函数:

bool cmp(int a, int b)
{
return a>b;//升序则为a<b
}

这个cmp参数使用起来非常方便,因为它正好能解决我们的pair排序问题。
我们只要根据数组中的元素类型定义cmp函数的参数,并且根据需求定义函数体

bool cmp(pair<int, int>a, pair<int, int>b)
{
return a.first<b.first;//根据fisrt的值升序排序
//return a.second<b.second;//根据second的值升序排序
}

然后调用sort函数sort(vec.begin(),vec.end(),cmp)。
便可以根据pair中first的值进行升序排序。

下面是具体代码实现

#include "stdafx.h"
#include <iostream>
#include <vector>
#include<algorithm> using namespace std; //根据first的值升序排序
bool cmp1(pair<int,int>a,pair<int,int>b)
{
return a.first < b.first;
} //根据second的值升序排序
bool cmp2(pair<int, int>a, pair<int, int>b)
{
return a.second < b.second;
}
int main()
{
vector<pair<int, int>>vec;
vec.push_back({ , });
vec.push_back({ , });
vec.push_back({ , });
vec.push_back({ , });
sort(vec.begin(), vec.end(), cmp1);
cout << "根据first的值升序排序:" << endl;
for (auto it = vec.begin();it != vec.end();it++)
{
cout << "(" << it->first << "," << it->second << ")" << endl;
}
sort(vec.begin(), vec.end(), cmp2);
cout << "根据second的值升序排序:" << endl;
for (auto it = vec.begin();it != vec.end();it++)
{
cout << "(" << it->first << "," << it->second << ")" << endl;
}
}

运行截图

C++对一组pair数据进行排序(sort函数的使用)的更多相关文章

  1. 排序 sort函数

    sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所有元素部分排序 partia ...

  2. 求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组

    求数组的最小值和最大值 //求数组当中最大值和最小值 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30]; //第一种方法 根据排序方法来求最大值和最小值 ...

  3. 【iOS】swift 排序Sort函数用法(包含NSDictionary排序)

    用了几分钟做的简单翻译 一个例子 直接贴代码,不过多解释 //这是我们的model class imageFile { var fileName = String() var fileID = Int ...

  4. Java中Collections类的排序sort函数两种用法

    java中的Colletions类主要实现列表List的排序功能.根据函数参数的传递,具体的排序可以分为 : 1.  自然排序(natural ordering). 函数原型:sort(List< ...

  5. 使用sort函数进行排序

    介绍 C++的一个重要组成部分STL(Standard Template Library),即标准模板库,是一些高级数据结构和算法的集合:高级数据结构(容器)主要包括list.set.vector.m ...

  6. sort函数的用法与实验

    用了这么久的sort排序,但是一直没有对他进行总结. 像我这样的蒟蒻有了sort排序就再也没有看过快排.冒泡排序.桶排序了...... sort的头文件<algorithm> 存在于C++ ...

  7. 转 sort按照数据大小排序

    一般默认的sort都是按照字母的ASCII进行排序的,现在想按照数字的大小进行排序 这里有一个文件test,内容为: 8723    23423 321324  213432 23      234 ...

  8. Python 使用 lambda() 结合sort() 或 sorted() 对列表嵌套字典格式的数据进行排序

    1.使用sort()方法进行排序 my_list = [{"age":65, "money":5}, {"age":35, "mo ...

  9. hdu 1263 水果 结构的排序+sort自定义排序

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

随机推荐

  1. iptables转发备忘

    iptables -F sysctl net.ipv4.ip_forward=1 iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8766 - ...

  2. Angular利用@ViewChild在父组件执行子组件的方法

    代码如下: @Component({ selector: 'my-app', template: ` <step-bar #stepBar></step-bar> ` }) e ...

  3. UVA1602

    实现的细节很多,学到了如何翻转.旋转.平移,get很多技巧,值得一做. AC代码: #include<cstdio> #include<cstring> #include< ...

  4. CodeForces-747A

    从sqrt(n)枚举到1,一旦满足一定是差最小的数. AC代码: #include<cstdio> #include<cmath> int main(){ int n; whi ...

  5. POJ1639 - Picnic Planning

    原题链接 Description 给出一张个点的无向边权图并钦定点,求使得点的度不超过的最小生成树. Solution 首先无视掉与相连的所有边,原图会变成若干互不连通的个块.对每个块分别求MST,再 ...

  6. 出行服务类API调用的代码示例合集:长途汽车查询、车型大全、火车票查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 长途汽车查询:全国主要城市的长途汽车时刻查询,汽车站查询 车型大全 ...

  7. Machine Learning|Andrew Ng|Coursera 吴恩达机器学习笔记

    Week1: Machine Learning: A computer program is said to learn from experience E with respect to some ...

  8. yaf插件类的使用

    yaf插件类的使用大小写敏感的. "插件名Plugin"为插件类的名字,这样会自动标志着这是一个插件. application.directory string 应用程序的目录,包 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 简介 这是一篇关于Redis使用的总结类型文章,会先简单的谈一下缓存 ...

  10. openstack-ocata-仪表盘服务6

    Dashboard(horizon)是一个web接口,使得云平台管理员以及用户可以管理不同的Openstack资源以及服务.这个部署示例使用的是 Apache Web 服务器.一. 安装和配置 接下来 ...