**
C++中自己经常使用的pair的用法
**
pair是C++中一种模板类型。每个pair对象可以存储两个值,这两个值可以是不同的数据类型。存储的值可以是基本数据类型也可以是自定义数据类型。
声明命名空间:
头文件:
#include<utility>
using namespace std;
【注意】
由于map内部实现涉及到pair,因此添加map头文件时会自动添加utility头文件
所以,记不住的话,可以用map头文件来代替
using namespace std;
或
using std::pair;
pair<int, int> pdata;
或使用全名
std::pair<int, int> pdata;
pair简介
pair是一个含有两个数据的数据组,可以看作结构体:
struct pair
{
Etype first:
Etype second;
};
其中Etype是用户自己设置的数据类型,(用pair声明的数组好像只能开到100000)
一、定义和初始化
pair<int, int> p1(1, 2);
pair<int, int> p2(p1); //用已有的对象初始化
pair<int, float> p3(1, 1.2);
pair<int, int> p4; //没有显示初始化,自动执行默认初始化操作。p4为(0,0)
二、赋值操作
1、使用强制类型转换
pair<int, int> p1(1, 2);
pair<int, int> p2;
p2 = pair<int, int> (1, 4);//赋值操作,需要用强制转换
p2 = p1; //赋值操作
2、使用make_pair()函数
pair<int, int> p3;
p3 = make_pair(1, 4); //无需指明类型,可自动生成pair对象
三、访问和修改操作
pair有两个属性:first和second。
pair<int, int> p1(1, 2);
p1.first = 11; //修改第一个数值
p1.second = 22; //修改第二个数值
cout << p1.first << "," << p1.second << endl;
四、实例
使用vector+pair来实现直角坐标数据的存放。
#include<iostream>
#include<vector>
using namespace std;
//定义一种新类型,它是一种vector类型,且每个元素都是pair类型。
typedef vector<pair<int, int> > vCoordinate;// >和>之间要有一个空格
int main()
{
vCoordinate vCoor;
for (int i = 0; i < 10; ++i)
{
vCoor.push_back(vCoordinate::value_type(i, i));//存储坐标数据
}
for (int i = 0; i < vCoor.size(); ++i)
{
//输出坐标数据
cout << vCoor[i].first << ", " << vCoor[i].second << endl;
}
getchar();
return 0;
}
注:
value_type可用于获取vector中元素的类型,
则vCoordinate::value_type会获取到vCoordinate元素的类型pair<int, int>;
所以vCoordinate::value_type(i, i)就等价于pair<int, int>(i, i)。
五、通过tie获取pair元素值
pair<string, int> getPreson()
{
return make_pair("Sven", 25);
}
int main(int argc, char **argv)
{
string name;
int ages;
tie(name, ages) = getPreson();
cout << "name: " << name << ", ages: " << ages << endl;
return 0;
}
六、排序
用sort()排序,默认按照first的值排序
#include<bits/stdc++.h>
using namespace std;
bool cmp(pair<string, int>a, pair<string, int>b)
{
return a.second < b.second;
}//根据second的值升序排序
int main()
{
pair<string,int> a[10];
a[1]=make_pair("one",1); //使用make_pair
a[0]=pair<string,int>("tow",2);//使用对象说明
sort(a,a+2,cmp) ;
cout<<a[0].first;
}
七、pair中再加pair
vector<pair<string, pair<int, float> > > vec;
vec.push_back(make_pair("i_am_cool", make_pair(19, 0.6)));