在學習關聯容器之前,首先要了解 STL 中的 pair 類別範本,因為關聯容器的一些成員函數的返回值是 pair 物件,而且 map 和 multimap 容器中的元素都是 pair 物件。pair 的定義如下:
template <class_Tl, class_T2>
struct pair
{
_T1 first;
_T2 second;
pair(): first(), second() {} //用無參建構函式初始化 first 和 second
pair(const _T1 &__a, const _T2 &__b): first(__a), second(__b) {}
template <class_U1, class_U2>
pair(const pair <_U1, _U2> &__p): first(__p.first), second(__p.second) {}
};
pair範例化出來的類都有兩個成員變數,一個是 first, 一個是 second。
STL 中還有一個函數模板 make_pair,其功能是生成一個 pair 模板類物件。make_pair 的原始碼如下:
template <class T1, class T2>
pair<T1, T2 > make_pair(T1 x, T2 y)
{
return ( pair<T1, T2> (x, y) );
}
下面的程式演示了 pair 和 make_pair 的用法。
#include <iostream>
using namespace std;
int main()
{
pair<int,double> p1;
cout << p1.first << "," << p1.second << endl; //輸出 0,0
pair<string,int> p2("this",20);
cout << p2.first << "," << p2.second << endl; //輸出 this,20
pair<int,int> p3(pair<char,char>('a','b'));
cout << p3.first << "," << p3.second << endl; //輸出 97,98
pair<int,string> p4 = make_pair(200,"hello");
cout << p4.first << "," << p4.second << endl; //輸出 200,hello
return 0;
}
pair 模板中的第三個建構函式是函數模板,引數必須是一個 pair 模板類物件的參照。程式中第 9 行的 p3 就是用這個建構函式初始化的。