详解模版类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;
}

运行结果:

相关推荐
Thera7776 小时前
状态机(State Machine)详解:原理、优缺点与 C++ 实战示例
开发语言·c++
linux开发之路7 小时前
C++高性能日志库开发实践
c++·c++项目·后端开发·c++新特性·c++校招
刻BITTER7 小时前
在TRAE 上安装PlatformIO
c++·单片机·嵌入式硬件·arduino
永远都不秃头的程序员(互关)7 小时前
C++动态数组实战:从手写到vector优化
c++·算法
水力魔方8 小时前
武理排水管网模拟分析系统应用专题5:模型克隆与并行计算
数据库·c++·算法·swmm
OliverH-yishuihan9 小时前
在win10上借助WSL用VS2019开发跨平台项目实例
linux·c++·windows
汉克老师9 小时前
GESP2025年12月认证C++二级真题与解析(编程题1 (环保能量球))
c++·gesp二级·gesp2级
郝学胜-神的一滴10 小时前
Linux进程与线程控制原语对比:双刃出鞘,各显锋芒
linux·服务器·开发语言·数据结构·c++·程序人生
青岛少儿编程-王老师10 小时前
CCF编程能力等级认证GESP—C++2级—20251227
java·开发语言·c++
javachen__10 小时前
341-十道经典程序设计题目
数据结构·c++·算法