当谈到关联式容器时,我们第一反应就要是键值对了,关联式容器内的元素通过键值对的方式存在,方便我们直接通过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内还重载了比较运算符如'>'、'<'之类进行同类型之间的字典序比较,比如:
#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; }
编译结果如下:
代码成功编译,证明了pair内重载过比较运算符,能够实现同类型之间的比较,非同类型比较会报错,不信读者可以一试。
总结:本节简单介绍了pair模板类,通过一个模板结构体”绑定“两个数据,是实现键值对的基础,同时通过代码掌握了pair的基本初始化和简单查改,读者需勤加练习,在以后碰到坐标问题pair也能模拟坐标,有利于问题解决。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程