`

C++ pair用法

阅读更多

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));
}
 
分享到:
评论

相关推荐

    C++ pair的基本用法总结整理

    pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要...

    C++ pair的用法实例详解

    主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下

    谈谈C++学习之Pair的使用方法

    一、Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以...由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明: typedef pair&lt;string, str

    sherpahu#AlgorithmsNotes#刷题笔记:C++基础知识——STL之pair&tuple1

    PAT基础知识——STL之pair&tuple定义用法初始化:使用大括号直接对first,second赋值查询用途替换二元结构体,初始化、获取元素值更方便用于m

    C++命令行参数的实现方法及使用方法,代码详细,执行正确。

    执行程序时,经常会用到命令行参数传递参数这种方式,今天实战一个命令行参数的从头到尾。 博文虽长,但均为干货。...program options是一系列pair组成的选项列表,它允许程序通过命令行或配置文件来读取这些参

    C++ Primer第四版【中文高清扫描版】.pdf

    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...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     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  ...

    开学了,有路网团购太便宜啦! C++编程惯用法(高级程序员常用方法和技巧)/深入C++系列(C++ Strategies and Tactics)

    在国际象棋中,学会如何移动棋子只能算是入门:要想掌控整个棋局,我们必须了解自己所下的每一步...11.1 选择使用C++ 11.2 采用C++ 11.3 设计和实现 11.4 开发一个坚实的基础 11.5 相关的思考 11.6 小结 11.7 问题

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     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  ...

    std vector用法详解

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放...

    C++教程网《Linux网络编程》视频百度云地址

    套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) ...

    2018年C++教程网的linux网络编程视频共41集百度云下载链接.rar

    套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 ...

    哈弗曼树实现 Huffman实现 哈夫曼实现

    使用方法 getCode:一个map, int&gt; 的对象,该对象表示对ascii文件的统计数据,一个map, pair, int&gt; &gt; 的对象,该对象是编码后各个字符的对应的编码以及该编码的长度 decode:一个map, pair, int&gt;&gt; 的对象表示编码,...

    向量的基本用法vector

    int main() { ifstream in("aaa.txt"); vector&lt;int&gt; s; for(int a;in&gt;&gt;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&lt;&lt;pair; return 0;

    C++超级缺省源,很好用

    支持快读,和cin,cout的使用方法一样,而在本地最后要加上一个Ctrl+z,才可以,还支持高精度,定义变量就是用__int128,支持、+、-、*、/、%、不等于、等于、大于等于、小于等于、&gt;、&lt;、快速幂,还可以直接用cin,...

    [免费]2018年C++教程网的linux网络编程视频百度云下载链接.rar

    套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) ...

    C++ tuple元组的基本用法(总结)

    std::tuple理论上可以有无数个任意类型的成员变量,而std::pair只能是2个成员,因此在需要保存3个及以上的数据时就需要使用tuple元组了。  tuple(元组)在c++11中开始引用的。tuple看似简单,其实它是简约而不简单...

Global site tag (gtag.js) - Google Analytics