首先我们要知道少加载一点头文件是减少运行时间的主要途径之一。
C++中的pair模板包含在头文件 utility 中。
一个pair保存两个数据成员。类似容器,pair是一个用来生成特定类型的模板。当创建一个pair的时候,必须提供两个类型名,此时pair的数据成员将具有对应的类型。
pair<string, string> p1;
pair<string, size_t> p2;
pair<string, vector<int>> p3;
pair 的默认构造函数对数据成员进行值初始化,因此p1是包含着两个空string的pair,size_t的值为0 。
当然也可以为每一个成员提供初始化器。
pair<string, string> twt = {"TwT" , "tWt"};
pair的成员都是public,分别为first和second。
如果只给一个成员赋值,就会出现错误。
pair<int ,int > a(2);
cout<<"第一个元素是"<<a.first<<endl;
cout<<"第二个元素是"<<a.second<<endl;
//错误类型是no matching function for call to"std::pair<int,int>::pair(int)"
下面给出一些pair上的操作:
pair<T1,T2> p1; //p1是一个pair,而且这两个类型分别为T1和T2的成员都进行了值初始化。
pair<T1,T2> p2(v1,v2);//p2是一个成员类型为T1,T2的pair,first和second成员分别用v1和v2来进行初始化。
pair<T1,T2> p3 = {v1,v2}; //同上。
make_pair(v1 ,v2);//返回一个用v1和v2进行初始化的pair。
p.first; //第一成员。
p.second; //第二成员。
定义pair和初始化时空格将不会产生任何影响。初始化的时候尽量采用()的形式,{}初始化是C++11的标准,只有在一些新的IDE中才会支持。
make_pair()的使用:
#include <cstdio>
#include <string> //没有的话string类型会报错
#include <iostream>
using namespace std;
int main()
{
int a;
string b="sad";
pair<int , string> p;
p = make_pair(a,b);
cout<<p.first<<endl;
cout<<p.second<<endl;
return 0;
}
是否一定需要头文件utility?
上面代码中就是定义了一个pair对象,但是头文件中并没有utility。需要注意的是,如果没有头文件utility,但是必须要有using namespace std。(还是写上吧,一般头文件不多的时候也不会有很明显的时间延迟)
pair就像是一个只含有两个数据成员的结构体,经常会被用作其他stl容器的元素。