三元组模板类——triplet.h
前言
你是否因为把 pair<int,pair<int,int>> 当作三元组来用而苦恼于代码中充斥着难看的 .second.first?或是为 tuple<int,int,int> 的奇妙语法 get<3>(x) 感到迷惑?我们需要一个封装完整的简单易用的三元组模板类,triplet.h由此诞生。
(虽然它的本体是 struct 而不是 class,但是 pair 也是 struct 却还是叫模板类,所以姑且把 triplet 也称作模板类吧。)
获取方式
请跟随上述链接中的指示选择对应的文件下载(或者直接复制)。
如无法正常访问 Github,请自行使用 Watt-Toolkit 等软件连接。
如果帮助到了你,也请给本文点个赞或为项目点个 Star 支持。
引入代码
引入方法#1:作为头文件引入
将头文件 triplet.h 和代码放在同一目录下,然后再代码开头加入 #include "triplet.h" 即可(引入第三方库只能使用引号 "")。
或者您也可以放在别的目录下,然后用文件绝对路径或者相对路径格式访问。关于绝对路径和相对路径,请自行搜索语法。
引入方法#2:作为代码的一部分
OIer 们提交代码只能提交一个文件,所以您也可以选择直接将 triplet.min.h 中除了前两行和最后一行(这是头文件相关宏定义)的内容复制下来,粘贴到您的代码相应位置即可正常使用。
使用方法
本三元组模板类采用和 C++ 自带 pair 一样的封装方法,所以使用方法也和 pair 类似。
省流:多了一个 .third 元素,其它构造、初始化、比较等和 pair 一模一样。
创建与初始化
triplet<int,int,int> t; //创建一个三元组t
triplet<int,int,int> t(1,2,3); //创建三元组t,通过构造函数将内部元素初始化为{1,2,3}
triplet<int,int,int> t={1,2,3}; //同上,不过这次是使用列表初始化
如果创建三元组的时候未初始化内部元素,三元组会自动调用元素类型的构造函数(如果有的话)进行初始化。
当然,类似于 make_pair,头文件中也自带了类似的函数:
make_triplet(x,y,z); //函数返回三元组{x,y,z}
调用内部元素
- 第一个元素:
t.first - 第二个元素:
t.second - 第三个元素:
t.third
是不是很好记呢?
比较运算符
triplet 重载了六个比较运算符,分别是 ==、!=、<、>、<=、>=。
类似于 pair 的比较方式,这六个运算符的比较规则如下:
==:first、second、third这三个元素均相等;!=:三个元素至少有一个不相等;<:以first为第一关键字,second为第二关键字,third为第三关键字比较大小(即优先比较first的大小,如果相等就比较second,再相等就比较third);>:同上;<=:不大于(x<=y等价于!(x>y));>=:不小于。
简而言之就是依次比较 first、second、third。
以上比较运算符仅要求内部元素有 < 和 == 运算符,且满足偏序关系(即 x<y 和 y<x 不能同时成立)。
版权声明
triplet.h 采用 MPL-2.0 (Mozilla Public License 2.0) 开源协议。
- 在使用或分发被授权软件时,必须保留原始版权、许可和免责声明,并在修改后的代码中包含相应的声明。
- 如果对被授权软件进行修改,并分发修改后的代码,必须以源代码形式提供修改后的代码,并遵守 MPL-2.0 许可证的条款。
- 在分发被授权软件时,不能移除或修改原始代码中的版权和许可声明。
——来源
本文采用 「CC-BY-NC 4.0」 创作共享协议,转载请注明作者及出处,禁止商业使用。
作者:Jerrycyx,原文链接:https://www.cnblogs.com/jerrycyx/p/18714687

浙公网安备 33010602011771号