码迷,mamicode.com
首页 > 其他好文 > 详细

pair

时间:2020-03-31 23:15:54      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:函数   struct   ber   nal   ret   class   opera   return   namespace   

pair

#ifndef __SGI_STL_INTERNAL_PAIR_H
#define __SGI_STL_INTERNAL_PAIR_H

__STL_BEGIN_NAMESPACE

template <class _T1, class _T2>
struct pair {
  typedef _T1 first_type;
  typedef _T2 second_type;

  //@ pair的两个成员变量,其属性是public
  _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) {}
  //@ 注意:用pair初始化另一个pair时,只能通过拷贝构造函数进行,不能通过赋值进行
  //@ 因为这里没有提供operator=操作符的重载
#endif
};

__STL_END_NAMESPACE

#endif /* __SGI_STL_INTERNAL_PAIR_H */

操作符

//@ operator==操作符重载,两个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; 
}

//@ operator<操作符重载
//@ 比较两个pair时,以第一个成员变量first为主,若第一个成员变量first不能判断表达式的大小
//@ 则对其第二个成员变量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); 
}

#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER

//@ 下面的操作符重载都是基于上面operator<和operator==操作符的.
//@ operator!=,operator>,operator<=,operator>=操作符的重载
template <class _T1, class _T2>
inline bool operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x == __y);
}

template <class _T1, class _T2>
inline bool operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return __y < __x;
}

template <class _T1, class _T2>
inline bool operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__y < __x);
}

template <class _T1, class _T2>
inline bool operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) {
  return !(__x < __y);
}

#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */

makr_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 在关联容器中经常被使用,它提供了两个成员变量 first 和 second,由于 pair 是一个 struct,所以其成员变量的属性是 public。
  • 在 pair struct 中提供了构造函数和拷贝构造函数,同时提供了两个最基本的操作 operator== 和 operator< 重载,其他的操作符重载都是基于前面两种的变形。

pair

标签:函数   struct   ber   nal   ret   class   opera   return   namespace   

原文地址:https://www.cnblogs.com/xiaojianliu/p/12609078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!