C++通用工具:pair和tuple
发布日期:2022-03-30 18:18:15
浏览次数:37
分类:博客文章
本文共 2214 字,大约阅读时间需要 7 分钟。
pair
class pair可将两个value视为一个单元。C++标准库内多处都用到了这个class,比如容器map,multimap,unordered_map等,任何函数如果需要返回两个value,也需要用到pair,比如minmax()等。
class pair的完整功能定义于头文件
#include
namespace std{ templatestruct pair { T1 first; T2 second; ... };}
由上述定义,我们不难得出,pair的所有成员都是public的,所以pair提供了直接访问数据成员的能力。
pair操作函数
pairp //default构造函数,建立一个函数,其元素类型分别t1和t2,各自以default函数初始化pair p(val1,val2) //建立一个pair,元素类型分别为t1和t2,以val1和val2为初值pair p(piecewise_construct,val1,val2); //建立一个pair,元素类型分别为tuple t1和t2,以tuple val1和val2为初值pair p(p2) //copy构造函数,建立p成为p2的拷贝p=p2 //将p2的值赋给pp.first //获得pair内的第一valuep.second //获得pair内的第二valueget<0>(p) //等价于p.firstget<1>(p) //等价于p.secondp1.swap(p2) //互换p1和p2的数据make_pair //返回一个pair,带有val1和val2的类型和数值。
注意,pair在进行比较操作时,第一元素具有较高比较级,只有在第一元素相等时,才会去比较第二元素。
tuple
tuple又叫元组,它扩展了pair的概念,拥有任意数量的元素。tuple呈现出一个异质元素列,其中每个类型都可以用来被指定。
tuple最初沿用的是C++98的标准,默认建议是至少10个实参,又累赘又限制,后来到C++11,tuple得到了极大的优化,才有了现在的class tuple
#includenamespace std{ template class tuple;}
tuple的操作
原则上,tuple的接口十分直观
tuplet //以n个给定类型的元素建立一个tuple,以各元素类型得到default构造函数完成初始化,基础类型的初值为0tuple t(v1,v2,...,vn) //以n个给定类型的元素建立一个tuple,以给定值完成初始化t=t2 //将t2赋值给tt.swap(t2) //互换t1和t2的数据make_tuple(v1,v2,...) //以传入的所有数据和类型建立一个tuple,并允许由此tuple提取数值
tuple的读入输出
#include#include #include using namespace std;int main(){ tuple t; get<0>(t)="Hello"; get<1>(t)="World"; get<2>(t)=" !"; get<3>(t)=2019; cout< <0>(t)<<" "< <1>(t)< <2>(t)<<" "< <3>(t); return 0;}
get<num>(typename tuple)里,num对应元素编号,以0开始,()内是tuple的名称,注意,tuple不可在编译期进行赋值。
转载地址:https://www.cnblogs.com/cloudplankroader/p/10460396.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月12日 06时05分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
node中npm地址切换神器nrm切换镜像站点
2019-04-27
喜提CSDN官方专家认证 2021-03-11
2019-04-27
Typescript编译器配置选项
2019-04-27
快速预览github项目使用Pages预览html文件解决方案-修改默认展示分支
2019-04-27
小程序入门教程之微信-04-API使用
2019-04-27
网页打开终端判断,移动端跳转移动端网址
2019-04-27
CSS实现优惠券特殊样式的技巧
2019-04-27
如何在微信小程序中优雅的使用less编写css样式
2019-04-27
Grid网格布局教程-语法篇
2019-04-27
github Desktop工具桌面版汉化教程
2019-04-27
web3js方法获取账户信息和余额
2019-04-27
Qt的对话框修改相关属性
2019-04-27
INNER JOIN的使用
2019-04-27
qt去除标题栏显示
2019-04-27
SQL两张表中有关联id,但是字段名不同查询
2019-04-27
QT设置tablewidget中的列宽无效
2019-04-27
QDate设置日历弹框
2019-04-27
QT中型号与槽的处理
2019-04-27