详解模版类pair

目录

一、pair简介

[二、 pair的创建](#二、 pair的创建)

三、pair的赋值

四、pair的排序

(1)用sort默认排序

(2)用sort中的自定义排序进行排序

五、pair的交换操作


一、pair简介

  1. pair是一个模版类,可以存储两个值的键值对.first以及.second。
  2. 常见用途:1️⃣用于需要返回两个值的函数; 2️⃣用于容器的元素,如std::map,std::set;
  3. pair包含在头文件#include <utility>

二、 pair的创建

(1)默认构造函数:空的pair对象。

cpp 复制代码
// 1. 默认构造函数,即创建空的 pair 对象
pair <DataType1, DataType2> pair1;

三、pair的赋值

(1)直接在构造的时候进行赋值有初始值的pair对象。

cpp 复制代码
// 2. 直接使用 2 个元素初始化成 pair 对象
pair <DataType1, DataType2> pair2(DataType1_Value, DataType2_Value);

(2)拷贝已有对象赋值。

cpp 复制代码
// 3. 拷贝构造函数:即借助另一个 pair 对象,创建新的 pair 对象
pair <DataType1, DataType2> pair3(pair2);

(3)为pair单个值赋上对应值。

cpp 复制代码
pair<string,int> pair1;
pair1.first = "baidu";
pair1.second = 34;

四、pair的排序

(1)用sort默认排序

现将第一个元素.first进行比较,如果相等,再比较.second

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <utility>

using namespace std;

int main(void){
	vector<pair<int,int>> p;
	p.push_back({7,8});
	p.push_back({5,6});
	p.push_back({3,4});
	p.push_back({1,2});
	sort(p.begin(),p.end());
	for(int i=0;i<p.size();i++){
		cout<<p[i].first<<" "<<p[i].second<<endl;
	} 
}

(2)用sort中的自定义排序进行排序

这里举例由大到小的排序顺序:

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <utility>

using namespace std;

bool cmp(pair<int,int> a,pair<int,int> b){
	if(a.first!=b.first){
		return a.first>b.first;
	}
	else{
		return a.second>b.second;
	}
}

int main(void){
	vector<pair<int,int>> p;
	p.push_back({1,2});
	p.push_back({3,4});
	p.push_back({5,6});
	p.push_back({7,8});
	sort(p.begin(),p.end(),cmp);
	for(int i=0;i<p.size();i++){
		cout<<p[i].first<<" "<<p[i].second<<endl;
	} 
}

运行结果:

五、pair的交换操作

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <utility>

using namespace std;

int main(void){
	pair<int,int> a({1,2});
	pair<int,int> b({3,4});
	cout<<a.first<<" "<<a.second<<endl;
	cout<<b.first<<" "<<b.second<<endl;
	a.swap(b);
	cout<<a.first<<" "<<a.second<<endl;
	cout<<b.first<<" "<<b.second<<endl;
}

运行结果:

相关推荐
炸膛坦客5 小时前
单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集
c语言·c++·单片机
旖-旎5 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
Henry Zhu1235 小时前
C++中的特殊成员函数与智能指针
c++
_wyt0018 小时前
多重背包问题详解
c++·背包dp
Ljwuhe8 小时前
C++——多态
开发语言·c++
越甲八千9 小时前
STL stack为何没有迭代器
c++
从零开始的代码生活_11 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸11 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地11 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
王维同学12 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全