欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-23 11:37:55
...

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的代码很短,也非常好懂。

相关标签: pair STL