Dotcpp  >  编程教程  >  C++STL库教程(附带题库)  >  C++STL之Pair类模板

C++STL之Pair类模板

点击打开在线编译器,边学边练

1. 简介

Pair表示“一对”的意思,pair将两个数据合成一组数据,在如下两种变成情况中,我们更加常见与使用pair,第一是使用STL中的map(在上一节讲过),对于map而言,key和value需要分开来进行使用和声明,使用pair可以合二为一(但是数据输出时依旧要分离),第二则是当我们的函数需要返回两个数据的时候,可以使用pair。

Pair的实现是一个结构体而不是一个类因此可以直接使用pair的成员变量。

总结一下:pair将一对值(可以有不同的数据类型)和为一个值

2. 相关头文件

标准头文件 #include<utility>。

但是笔者亲测在编译器可以不声明这个头文件而直接使用,貌似在C++中,pair被放入了std命名空间中了。

3. 初始化

格式为:

template <class T1, class T2> struct pair;

在现实情况中我们可以像类似于STL创建新容器一样创建pair也可以直接使用,如下:

pair<int,int> p;
pair<int,int> p(10,20);

或者是:

map<char,int> m;
    m.insert(pair<char,int>('a',10));

明白了如何初始化,接下来谈一下如何使用以及方法。

对与pair中的两个元素,我们可以使用first和second来进行访问,顾名思义first返回第一个元素,而second返回第二个元素,如:

pair<int,int> p(10,20);
    cout<<p.first<<" "<<p.second<<endl;

4. make_pair:

函数原型template pair make_pair(T1 a, T2 b) { return pair(a, b); }

我们可以通过make_pair生成我们的所需要的pair,对于一般的pair而言,我们如果需要对其进行赋值,则需要

    pair<int,int> p;
    p.first=10,p.second=20;

但如果我们使用make_pair方法,则可以变成如下内容:

 pair<int,int> p;
    p=make_pair(10,20);

可以看见,使用make_pair不仅仅让我们免去了对两个变量进行分开来的访问赋值,同时make_pair也智能的接受变量的类型,不需要再度指定,也就是说,make_pair本身是接受隐式类型转换的,比如定义的是一个int类型,使用make_pair传入一个float类型的参数,make_pair不会报错,而是回自动的进行一个类型转换,将float变为int,这样可以获得更高的灵活度,同时也会有一些小问题。

5.相关配套题目

1096题扫雷(注意,该题目为英文题)

与较难的BFS类型题目不同,本题不需要有BFS这样的搜索思路,而且本题目涉及到一个重要的内容,就是坐标,(x,y)在这类型的题目中,二维坐标往往采用一对数据进行表示,而本题目可以给自己增加要求,使用pair进行坐标的存储运算。

6. 举例—函数多返回值:

#include<iostream>
#include<string>
#include<utility>
 
using namespace std;
 
pair<string,int> getClass(int id){
    return make_pair("DOTCPP!",id);
}
 
int main(int argc,char **argv){
    pair<string,int> a;
    a=getClass(10);
    cout<<a.first<<" "<<a.second<<endl;
    return 0;
}

输出内容:

DOTCPP! 10


作业:
1096Minesweeper

本文固定URL:https://www.dotcpp.com/course/119

数据结构教程
第一章 数据结构入门
第二章 链表
第三章 栈
第四章 队列
第五章 C++STL库教程(附带题库)
第六章 串、数组、矩阵和广义表
第七章 树
第八章 图
第九章 查找算法
第十章 排序算法
第十一章 算法和竞赛
第十二章 后记
Dotcpp在线编译      (登录可减少运行等待时间)