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

运行结果:

相关推荐
努力的小帅27 分钟前
C++_哈希
开发语言·c++·学习·算法·哈希算法·散列表
阿让啊7 小时前
C语言strtol 函数使用方法
c语言·数据结构·c++·单片机·嵌入式硬件
liulilittle7 小时前
OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
网络·c++·网络协议·tcp/ip·算法·ip·通信
田里的水稻10 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
Jayden_Ruan11 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法
liulun11 小时前
Skia如何渲染 Lottie 动画
c++·动画
点云SLAM12 小时前
C++ 常见面试题汇总
java·开发语言·c++·算法·面试·内存管理
UnnamedOrange14 小时前
ROS2 配置 linter 的代码格式化工具为 clang-format
c++·cmake
Dobby_0514 小时前
【面试题】C++系列(一)
c++·面经
一拳一个呆瓜14 小时前
【MFC】对话框节点属性:Language(语言)
c++·mfc