c语言pair的用法,C++ std::pair的用法

本文详细介绍了STL中的pair模板类,包括它的构造、成员访问、make_pair函数的使用以及类型转换特性。pair常用于将两个不同类型的数据组合在一起,如在map中保存键值对,或者函数返回多个值。文中还提到了pair的赋值操作和在特定情境下的类型匹配问题,强调了其灵活性与潜在的类型匹配陷阱。同时,pair在STL容器如set和multiset中的insert操作也有重要应用。
摘要由CSDN通过智能技术生成

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(1, 1.1);

std::make_pair(1, 1.1);

是不同的,第一个就是float,而第2个会自己匹配成double。

类模板:template struct pair

参数:T1是第一个值的数据类型,T2是第二个值的数据类型。

功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。

具体用法:

1.定义(构造):

1 pair p1; //使用默认构造函数

2 pair p2(1, 2.4); //用给定值初始化

3 pair p3(p2); //拷贝构造函数

2.访问两个元素(通过first和second):

1 pair p1; //使用默认构造函数

2 p1.first = 1;

3 p1.second = 2.5;

4 cout << p1.first << ' ' << p1.second << endl;

输出结果:1 2.5

3.赋值operator = :

(1)利用make_pair:

1 pair p1;

2 p1 = make_pair(1, 1.2);

(2)变量间赋值:

pair p1(1, 1.2);

pair p2 = p1;

Pair类型概述

pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下:

pair a;

表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。

pair a("James", "Joy");

也可以像上面一样在定义的时候直接对其初始化。

由于pair类型的使用比较繁琐,因为如果要定义多个形同的pair类型的时候,可以时候typedef简化声明:

typedef pair author;

author pro("May", "Lily");

author joye("James", "Joyce");

Pair对象的操作

对于pair类,由于它只有两个元素,分别名为first和second,因此直接使用普通的点操作符即可访问其成员

pair a("Lily", "Poly");

string name;

name = pair.second;

生成新的pair对象

可以使用make_pair对已存在的两个数据构造一个新的pair类型:

int a = 8;

string m = "James";

pair newone;

newone = make_pair(a, m);

STL pair 常见用法详解

学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

20140315 模板类pair的用法 2、visual 2010调整代码格式是ctrl&plus;k&plus;

1.模板类pair的用法 包含头文件#include   http://blog.csdn.net/laixingjun/article/details/9005200 ...

【STL】-pair的用法

初始化: std::pair p; //initialize p.first and p.second with zero std::pair

【CodeForces-1041C】Coffee Break(二分解决关于set&comma;pair&comma;upper&lowbar;bound用法)

//题意:一个的工作时间是m分钟. // 在特定的时间和咖啡 n a1,a2....an,, ai代表的是每个咖啡要在一天中对应的时间点喝掉 // 每一次喝咖啡的时间为1分钟 // 必须在一天中的ai ...

C&plus;&plus; std&colon;&colon;map&colon;&colon;erase用法及其陷阱

1.引入: STL的map中有一个erase方法用来从一个map中删除制定的节点 eg: map mapTest; typedef map

std&colon;&colon;shared&lowbar;ptr 和 std&colon;&colon;weak&lowbar;ptr的用法以及引用计数的循环引用问题

在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...

pair常见用法

pair的使用 关于pair 什么是pair 可以将pair看做一个内部有两个元素的结构体,且两个元素的类型是可以指定的. struct pair{ typename1 first; typename ...

STL——容器(Set &amp&semi; multiset) insert 的返回值 和 pair 的用法

1. 使用 insert 插入时的返回值: 将一个元素插入 (insert) 到 set 或 multiset 中时,如果插入失败返回的类型是一个 pair 的自定类型,insert 源码如下: in ...

随机推荐

今天思考一个问题,PHP const和static的区别

static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心 ...

ASP------如何读取文件内容

一名Delphi程序员的开发习惯

一名Delphi程序员的开发习惯 有关开发习惯的一些想法,如鲠在喉,不吐不快.究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些 建议,或者参考(希望不是误 ...

正确的理解this 和 super

this和super是Java的两个关键字. 先明确一个问题,有人错误的认为它们是对象里的“属性”,这只能怪老师没有讲清楚计算机的本质了.因为计算机的处理器只能用指令去处理数据,像C语言之类的容易理解 ...

Bootstrap学习之路(2)---导航组件

在bootstrap中,导航条的样式都依赖于.nav类,而样式又分为多种,如: 标签页的样式为:.nav-tabs

Apache 编译安装

# wget http://www.apache.org/dist/httpd/httpd-2.2.9.tar.gz  (此处我是直接用的下载好的包) # tar -zxvf httpd-2.2.9. ...

WindowsService的调试方法

本人转载:http://www.cnblogs.com/xiebin1986/archive/2011/12/15/2288893.html 调试WindowsService,以前用过一个附加到进程的 ...

SGU 190&period;Dominoes&lpar;二分图匹配&rpar;

时间限制:0.25s 空间限制:4M 题意: 给定一个N*N的棋盘,一些格子被移除,在棋盘上放置一些1*2的骨牌,判定能否放满,并且输出任意方案. Solution: 首先考虑对棋盘的一个格子黑白染色 ...

ALAsset和ALAssetRepresentation

ALAsset类代表相册中的每个资源文件,可以通过它获取资源文件的相关信息还能修改和新建资源文件,ALAssetRepresentation类代表相册中每个资源文件的详细信息,可以通过它获取资源的大小 ...

C&num;&lowbar;Test

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Plus ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值