C++对一组pair数据进行排序(sort函数的使用)
2018-06-17 21:01:23来源:未知 阅读 ()
最近在写一个算法的时候,把一些数据存在了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({ 1,2 }); vec.push_back({ 4,2 }); vec.push_back({ 3,3 }); vec.push_back({ 2,1 }); 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; } }
运行截图
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++ 数组、二维数组、函数参数
下一篇:bzoj1016
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash