SGISTL源码阅读二十一 piar的实现
程序员文章站
2022-03-23 11:37:55
...
SGISTL源码阅读二十一 piar的实现
前言
在之前set
和map
的学习中,我们已经见过了pair
,它的作用就是把一对值封装成一个。而且这一对值可以是不同数据类型的,对于set
和map
来说是绝佳的选择。
深入源码
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
的代码很短,也非常好懂。
上一篇: php怎么删除数组指定键名
下一篇: Vue.js框架是什么