C++ pair用法
摘自:http://hi.baidu.com/lucene1983/blog/item/83bb68351d12ffbed1a2d3fe.html
1 pair的应用
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
2 make_pair函数
template pair make_pair(T1 a, T2 b) { return pair(a, b); }
很明显,我们可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。 一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象很方便,代码也很清晰。 另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。灵活度也带来了一些问题如:
std::pair<int, float>(1, 1.1);
std::make_pair(1, 1.1);
是不同的,第一个就是float,而第2个会自己匹配成double。
以上是从网上找来的资料,我又查了一下关于pair的定义,其定义是一个模板结构。
// TEMPLATE STRUCT pair
template<class _Ty1,
class _Ty2> struct pair
{
// store a pair of values
typedef pair<_Ty1, _Ty2> _Myt;
typedef _Ty1 first_type;
typedef _Ty2 second_type;
pair()
: first(_Ty1()), second(_Ty2())
{ // construct from defaults
}
pair(const _Ty1& _Val1, const _Ty2& _Val2)
: first(_Val1), second(_Val2)
{ // construct from specified values
}
template<class _Other1,
class _Other2>
pair(const pair<_Other1, _Other2>& _Right)
: first(_Right.first), second(_Right.second)
{ // construct from compatible pair
}
void swap(_Myt& _Right)
{ // exchange contents with _Right
std::swap(first, _Right.first);
std::swap(second, _Right.second);
}
_Ty1 first; // the first stored value
_Ty2 second; // the second stored value
};
//make_pair同样也是一个模板函数。其定义如下:
template<class _Ty1,
class _Ty2> inline
pair<_Ty1, _Ty2> make_pair(_Ty1 _Val1, _Ty2 _Val2)
{ // return pair composed from arguments
return (pair<_Ty1, _Ty2>(_Val1, _Val2));
}
分享到:
相关推荐
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要...
主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下
一、Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以...由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明: typedef pair<string, str
PAT基础知识——STL之pair&tuple定义用法初始化:使用大括号直接对first,second赋值查询用途替换二元结构体,初始化、获取元素值更方便用于m
执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。 博文虽长,但均为干货。...program options是一系列pair组成的选项列表,它允许程序通过命令行或配置文件来读取这些参
10.1 引言:pair类型 306 10.2 关联容器 308 10.3 map类型 309 10.3.1 map对象的定义 309 10.3.2 map定义的类型 310 10.3.3 给map添加元素 311 10.3.4 使用下标访问map对象 311 10.3.5 map::insert的使用 313 10.3.6...
11.2.3 pair类型 379 11.3 关联容器操作 381 11.3.1 关联容器迭代器 382 11.3.2 添加元素 383 11.3.3 删除元素 386 11.3.4 map的下标操作 387 11.3.5 访问元素 388 11.3.6 一个单词转换的map 391 ...
在国际象棋中,学会如何移动棋子只能算是入门:要想掌控整个棋局,我们必须了解自己所下的每一步...11.1 选择使用C++ 11.2 采用C++ 11.3 设计和实现 11.4 开发一个坚实的基础 11.5 相关的思考 11.6 小结 11.7 问题
11.2.3 pair类型 379 11.3 关联容器操作 381 11.3.1 关联容器迭代器 382 11.3.2 添加元素 383 11.3.3 删除元素 386 11.3.4 map的下标操作 387 11.3.5 访问元素 388 11.3.6 一个单词转换的map 391 ...
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放...
套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) ...
套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 ...
使用方法 getCode:一个map, int> 的对象,该对象表示对ascii文件的统计数据,一个map, pair, int> > 的对象,该对象是编码后各个字符的对应的编码以及该编码的长度 decode:一个map, pair, int>> 的对象表示编码,...
int main() { ifstream in("aaa.txt"); vector<int> s; for(int a;in>>a;... int pair = 0; for(int i=0;i()-1;++i) for(int j=i+1;j();++j) if(s[i]==s[j]) pair++; cout<<pair; return 0;
支持快读,和cin,cout的使用方法一样,而在本地最后要加上一个Ctrl+z,才可以,还支持高精度,定义变量就是用__int128,支持、+、-、*、/、%、不等于、等于、大于等于、小于等于、>、<、快速幂,还可以直接用cin,...
套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) ...
std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员,因此在需要保存3个及以上的数据时就需要使用tuple元组了。 tuple(元组)在c++11中开始引用的。tuple看似简单,其实它是简约而不简单...