C++标准库之 Pair

pair 在C++中是一个存储两个数据的容器,他是组成 map 的元素,下面先来看一下他的class 信息

arduino 复制代码
template<typename _T1, typename _T2>
  struct pair
  {
    typedef _T1 first_type;    /// @c first_type is the first bound type
    typedef _T2 second_type;   /// @c second_type is the second bound type

    _T1 first;                 /// @c first is a copy of the first object
    _T2 second;                /// @c second is a copy of the second object
}

这里只是这贴出来了一小部分代码,不过从代码中可以看出来,他是一个模板类 也就是 java 中的泛型容器,在使用过程中需要指定 pair 中的模板类型

例子如下

c 复制代码
正常写法
std::pair<int,std::string> p(10,"tsm");

但是由于这种写法比较刻板,而且需要书写的代码量比较多, C++的标准库给出了一个简单的写法

c 复制代码
//简单写法
auto tsm_pair=std::make_pair(15,"11");

简写后不需要再指定数据类型了,非常的方便

使用 pair 中的元素也是非常简单的,下面使用打印的例子来获取 pair 中保存的数据

c 复制代码
std::cout<< "打印 pair :"<<tsm_pair.first <<"  "<< tsm_pair.second <<std::endl;

使用它的数据就是使用他的first 与 second 即可

在 stl pair 包中,重写了 pair 的 == ,>, <, !=, 等方法,下面我们以 == 为例看一下

arduino 复制代码
/// Two pairs of the same type are equal iff their members are equal.
template<typename _T1, typename _T2>
  inline _GLIBCXX_CONSTEXPR bool
  operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  { return __x.first == __y.first && __x.second == __y.second; }

可以看到在做比较的过程中是先比较的first ,然后在比较的second ,其他方法也是亦然

下面了一个比较的例子

c 复制代码
std::pair<int,std::string> p(10,"tsm321");

std::pair<int , std::string> p1 (5,"tsm123");

bool result= p>p1 ;

std::cout<< "p是否大于p1:"<<result<<std::endl;

结果如下:

css 复制代码
p是否大于p1:1

在pair 中还有一个 swap 交换的方法 ,那就是将一个 pair 的值交给另一个 pair,例子如下

c 复制代码
std::pair<int , std::string> p1 (5,"tsm123");

std::pair<int , std::string> p2 (10,"1111");
p1.swap(p2);

std::cout<< "p1 swap 方法执行后的结果:"<<p1.first <<"  "<< p1.second <<std::endl;

结果如下:

yaml 复制代码
p1 swap 方法执行后的结果:10  1111

p1.swap(p2); 的意思就是将 p2 的值赋值给 p1

到了这里 pair 的简单介绍就完成了

相关推荐
rainbow68894 小时前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊5 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20265 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹6 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑6 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴6 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6736 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874757 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春7 小时前
C++之继承的方式
c++·private·public·protected·继承方式
智者知已应修善业8 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法