当谈到关联式容器时,我们第一反应就要是键值对了,关联式容器内的元素通过键值对的方式存在,方便我们直接通过key(键)来操作元素(value)值,提高了操作效率。键值对通过把两个元素”捆绑“起来,实现一一对应的关系。今天我们重点讲解构成关联式容器的基础,模板类——pair。pair的意思是”一对“,类似”情侣“的概念,将两个数据”捆绑“起来。其本质是一个结构体,存储了两个任意数据类型,能够进行初始化以及查改操作,在使用pair模板类时我们需要包含头文件<ultility>。我们可以通过first()访问第一个元素,second()访问第二个元素。下面我就通过代码向读者介绍pair的初始化和简单查改操作。

#include<bits/stdc++.h>//万能头,以效率为中心 
#include<utility>//包含头文件,养成好习惯 
#include<string>
/*pair的初始化和简单查改操作 */
using namespace std;
/*初始化*/ 
void test1()
{
/*1.通过等号赋值&&推荐排名*/ 
pair<int,int> p1{1,1};//{}初始化列表
pair<int,int> p2({2,2}) ;//构造函数
pair<int,int> p3={3,3} ;//等号赋值
pair<int,int> p4(p1) ;//拷贝构造
pair<int,int> p5;
p5=p1;//'='运算符重载
pair<int,int> p6;
p6.first =6;
p6.second=6;//通过first()、second()成员变量进行赋值 
pair<int,int>p7= make_pair(7,7);//通过make_pair万能引用和完美转发进行构造,配合auto能处理复杂pair对象 
}
/*简单的查改操作*/
void test2() 
{
/*当我要访问STL教程时:*/
pair<string,string> pr1({"STL库教程","https://www.dotcpp.com/course/stl/"});
cout<< pr1.first << " 的网址是: "<< pr1.second << '\n' ;
/*当我要访问C++教程时:*/
pr1.first="C++教程" ;
pr1.second="https://www.dotcpp.com/course/cpp/";
cout<< pr1.first << " 的网址是: "<< pr1.second << '\n' ;
 
}
  
int main(){
    test1();
    test2();
    return 0;
}

编译结果如下:

pair

成功实现pair的初始化以及查改操作。pair内还重载了比较运算符如'>'、'<'之类进行同类型之间的字典序比较,比如:

#include<bits/stdc++.h>//万能头,以效率为中心 
#include<utility>//包含头文件,养成好习惯 
#include<string>
/*pair内重载比较运算符 */
using namespace std;
void test()
{
pair<int,int> p1{1,1};
pair<int,int> p2{2,2,};
if(p2>p1)cout << "p2>p1\n";
pair<string,char> p3{"Dotcpp",'A'};
pair<string,char> p4{"coding",'B'};
if(p4>p3)cout << "p4>p3\n";
}
int main(){
    test();
    return 0;
}

编译结果如下:

pari能够进行同类型比较

代码成功编译,证明了pair内重载过比较运算符,能够实现同类型之间的比较,非同类型比较会报错,不信读者可以一试。

总结:本节简单介绍了pair模板类,通过一个模板结构体”绑定“两个数据,是实现键值对的基础,同时通过代码掌握了pair的基本初始化和简单查改,读者需勤加练习,在以后碰到坐标问题pair也能模拟坐标,有利于问题解决。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)