【概述】

pair 是定义在 <utility> 头文件中的一个简单的模板类,常用于表示一个二元组或元素对,且其提供了按照字典序对元素对进行大小比较的比较运算符模版函数。

定义: pair<T1,T2> pairName

参数:T1 是第一个值的数据类型,T2 是第二个值的数据类型。

【构造与访问】

  • pair<T1,T2> p:构造一个空 pair,其中无任何元素
  • pair<T1,T2> p(elem1,elem2):构造一个元素值分别为 elem1、elem2 的 pair
  • pair<T1,T2> p1(p2):产生另一个同型 pair 的副本,所有元素都被复制

pair 的一对值可以具有不同的数据类型(T1 和 T2),两个值可以分别通过其公有函数 first、second 来进行访问与赋值。

pair<int, string> p1; //默认构造函数
pair<string, double> p2("abc’", 100); //重载构造函数
pair<string, double> p3(p2);  //复制构造函数//访问
cout << p2.first << " " << p2.second << endl;
cout << p3.first << " " << p3.second << endl;

使用技巧:由于 pair 类型比较繁琐,若要定义多个 pair 类型时,可以使用 typedef 简化声明

typedef pair<string, string> name;
name name1("May", "Lily");
name name2("James", "Joyce");

【赋值】

1.利用 make_pair() 函数来赋值

pair<int, double> p1;
p1 = make_pair(1, 1.2);

2.变量间赋值

pair<int, double> p1(1, 1.2);
pair<int, double> p2 = p1;

【运算符的重载】

在 <utility> 中,已经定义了 pair 上的六个比较运算符:<、>、<=、>=、==、!=,其基本规则是先比较 first,当 first 相等时再比较 second,若想重定义自己的比较逻辑,可以通过重载运算符来重新指定比较逻辑。

pair<int, double> p1(1, 2.5);
pair<int, double> p2(2, 2.5);
pair<int, double> p3(2, 3.5);//结果:p1<p2
if(p1>=p2)cout<<"p1>=p2"<<endl;
elsecout<<"p1<p2"<<endl;//结果:p2<p3
if(p2<p3)cout<<"p2<p3"<<endl;
elsecout<<"p2>=p3"<<endl;

【应用】

pair 主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。

其实质上是一个结构体,主要的两个成员变量是 first 和 second,这两个变量可以直接使用。

最常用的例子就是在构建二维坐标系的点时,可以使用 pair 来构造

C++语言基础 —— STL —— 容器与迭代器 —— pair相关推荐

  1. C++语言基础 —— STL —— 容器与迭代器

    [概述] STL 是指 C++ 标准模板库,是 C++ 语言标准中的重要组成部分,其以模板类和模版函数的形式提供了各种数据结构与算法的精巧实现,如果能充分使用 STL,可以在代码空间.执行时间.编码效 ...

  2. C++语言基础 —— STL —— 容器与迭代器 —— list 与 deque

    [概述] list 与 deque 是在程序设计中会用到的数据容器,STL 提供了方便的链表.双端队列的实现,准确地说,STL 中的 list 与 deque 不同于 pair.vector 等容器, ...

  3. C++语言基础 —— STL —— 容器与迭代器 —— bitset

    [概述] bitset 位于 <bitset> 头文件中,其是 STL 的一部分,准确地说,bitset 是一个模板类而不是容器,其模板参数不是类型,而整型的数值,即:bitset < ...

  4. C++语言基础 —— STL —— 容器与迭代器 —— map 与 multimap

    [概述] map 和 multimap 是映射数据容器,两者均定义与 <map> 头文件中,其所有元素都是 pair,pair 的第一个元素被视为键值,第二个元素为实值. 他们是基于某一类 ...

  5. C++语言基础 —— STL —— 容器与迭代器 —— heap

    [概述] 在 STL 中,并没有将堆作为一种容器,其实现需要借助更低一层的容器组件作为其底层机制,比如:list.priority_queue 等,heap 的底层机制 vector 本身就是一个类模 ...

  6. C++语言基础 —— STL —— 容器与迭代器 —— set 与 multiset

    [概述] set 和 multiset 是集合数据容器,通过链表进行组织,具体实现采用了红黑树的平衡二叉树的数据结构,两者均定义在 <set> 头文件中,其会根据特定的规则,自动将元素排序 ...

  7. C++语言基础 —— STL —— 容器与迭代器 —— vector

    [概述] vector 是定义在 <vector> 头文件中的向量容器模版类,其以连续数组的方式存储元素序列,可以将 vector 看作是以顺序结构实现的线性表. 当在程序中需要使用动态数 ...

  8. C++ [STL容器反向迭代器]

    本文已收录至<C++语言和高级数据结构>专栏! 作者:ARMCSKGT STL容器反向迭代器 前言 正文 适配器 反向迭代器 反向迭代器框架 默认成员函数 反向迭代器的遍历 反向迭代器的比 ...

  9. STL 容器和迭代器连载6_顺序容器的操作3

    2019独角兽企业重金招聘Python工程师标准>>> /*- ========================================================== ...

最新文章

  1. 创新实训个人记录 : 个人工作总结
  2. 5187. 收集足够苹果的最小花园周长
  3. 在JupyterNotebook中使用多个Python环境
  4. Android ArryaList 笔记
  5. win10系统,virtualBox导入centos7.3报错
  6. highcharts饼图
  7. 聊天机器人5步重塑酒店业
  8. linux 离线安装node.js,Linux上离线安装node.js、Newman、newman-reporter-html
  9. MySQL(17)-----数值函数
  10. MySQL(8)-----truncate清空表和字段自增
  11. java软件安装教程_r软件安装教程
  12. 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
  13. python实现CRAPS赌博游戏。
  14. 【应急响应】Linux下变种DDG挖矿应急处理总结
  15. jmeter常见问题总结
  16. 《Adobe Premiere Pro CS4经典教程》——1.7 Adobe Premiere Pro工作区
  17. 微信营销解密个人分析
  18. 2022最新微信步数提交平台网站PHP源码
  19. 【076】朴素贝叶斯介绍
  20. 遥感应用发展观察(更新)

热门文章

  1. 2018年“百家姓”出炉,新生儿爆款名字是这些......
  2. 为什么你跟高手有差距?因为他们会在假期里读这5本书
  3. 分析一天1000万北京地铁客流,我们发现...
  4. python学生名片系统_python学生管理名片
  5. 如何解决 IDEA 占用大量 CPU 导致的卡顿问题?这顿操作猛如虎
  6. 工作总结!日志打印的15个建议
  7. 全球领先的数据库!我用它直接让公司项目的性能提升了一半~
  8. 央视曝光:全国第九大电商平台倒了!创始人卷走260亿,1200万人被骗
  9. 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解
  10. 万字长文 | 淘宝 10年架构演进