SGISTL源码阅读二十一 piar的实现

本文深入探讨了SGISTL库中pair的实现细节,包括其结构定义、拷贝构造函数、操作符重载以及make_pair函数的使用。通过源码解析,揭示了pair如何将两不同类型的数据封装在一起,为set和map提供了关键的支持。

SGISTL源码阅读二十一 piar的实现

前言

在之前setmap的学习中,我们已经见过了pair,它的作用就是把一对值封装成一个。而且这一对值可以是不同数据类型的,对于setmap来说是绝佳的选择。

深入源码

pair的定义及拷贝构造函数
template <class T1, class T2>
struct pair {
  //声明别名
  typedef T1 first_type;
  typedef T2 second_type;
  //pair内部维护了两个值
  T1 first;
  T2 second;
  //构造函数
  pair() : first(T1()), second(T2()) {}
  pair(const T1& a, const T2& b) : first(a), second(b) {}

#ifdef __STL_MEMBER_TEMPLATES
  //pair的拷贝构造函数
  template <class U1, class U2>
  pair(const pair<U1, U2>& p) : first(p.first), second(p.second) {}
#endif
};

我们可以看到pair的实现是非常简单的,就是一个模板结构体,内部维护了两个值,可以是两个不同类型的值。map在使用它的时候将第一个值作为键值,第二个值作为实值。

操作符重载和pair提供的接口
//重载==
template <class T1, class T2>
inline bool operator==(const pair<T1, T2>& x, const pair<T1, T2>& y) {
  //如果两个值都相等才算相等
  return x.first == y.first && x.second == y.second;
}
//重载<
template <class T1, class T2>
inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) {
  //只要第一个值小就算小
  //如果第一个值相等则比较第二个值
  return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
}
//创建pair的函数,返回值是一个pair
template <class T1, class T2>
inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
  return pair<T1, T2>(x, y);
}

###总结
pair的代码很短,也非常好懂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值