STL 源码分析 # stl_pair #

STL 源码分析 # stl_pair #



pair是一种很简单也很常用的关联容器(associative container).



/***********************************************
Programmer	:	EOF
Date		:	2015.04.10
File		:	pair.cpp
E-mail		:	[email protected]

***********************************************/

#include <iostream>
#include <string>


using namespace std;

int main(int argc, char const *argv[])
{
	pair<int, int> int_pair(100, 200);
	pair<string, int>  si_pair("hello world", 42);
	pair<string, string> ss_pair("jason", "leaster");

	cout << int_pair.first << " " << int_pair.second << endl;
	
	cout << si_pair.first  << " " << si_pair.second  << endl;


	cout << ss_pair.first  << " " << ss_pair.second  << endl;
	return 0;
}





很难得啊...pair数据类型的数据成员居然不是私有成员~


我们看看pair的实现:

STL 源码分析 # stl_pair #_第1张图片


这是我到目前为止在STL里面看到的最简单的数据抽象... ...


支持的各种比较运算符: 




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); 
}

#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER

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);
}


而make_pair函数其实本质上也就是调用了构造函数....

STL 源码分析 # stl_pair #_第2张图片







STL 源码分析 # stl_pair #_第3张图片





你可能感兴趣的:(C++,源码,STL)