STL 之 pair 源码剖析

需明确概念: (1)struct 与class 的区别 (2)default constructor 与 template constructor 的作用 (3)在头文件<utility>中定义
#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;
T1 first; // 注意,它是 public
T2 second; // 注意,它是 public
pair() : first(T1()), second(T2()) {}
pair(const T1& a, const T2& b) : first(a), second(b) {}
#ifdef __STL_MEMBER_TEMPLATES
// 以pair A 為pair B 的初值。A, B 的對應元素型別可以不同,只要能轉換就好。
template <class U1, class U2>
pair(const pair<U1, U2>& p) : first(p.first), second(p.second) {}
#endif
};
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);
// x 的第一元素小於y 的第一元素,或,x 的第一元素不大於y 的第一元素而
// x 的第二元素小於y 的第二元素,才視為x 小於y。
}
// 根據兩個數值,製造出一個pair
template <class T1, class T2>
inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
return pair<T1, T2>(x, y);
}
__STL_END_NAMESPACE
#endif /* __SGI_STL_INTERNAL_PAIR_H */

你可能感兴趣的:(STL,pair)