当前位置: 首页 > news >正文

C++ 容器:pair tuple

摘要:

   std::pairstd::tuple并不是stl容器库中的容器,不过鉴于经常使用能和STL配合,也具有容器的属性,就放一起浅提一下,它们用于函数传参和函数返回值也挺方便。

template <class… Types> class tuple;
template <class T1, class T2> struct pair;

(开发环境:VScode,C++17)

关键词C++容器数据存储数据类型,pair ,tuple

声明:本文作者原创,转载请附上文章出处与本文链接。

(文章目录:)

文章目录

      • 摘要:
      • 正文:
        • pair
          • 使用例子:
        • tuple
          • 常用函数方法:
          • 使用例子:
      • 推荐阅读

正文:

pair

在C++中,pair 是一个非常实用的容器,它定义在 <utility> 头文件中。pair 容器可以存储两个值,这两个值可以是不同的数据类型。pair 通常用于需要同时处理两个相关数据的场景,比如一个键(key)和一个值(value),或者任何需要成对出现的数据。

pair 可以看作是把 tuple 的 size 限制为 2 的一个特例

使用例子:
#include <iostream>
#include <unordered_map>
#include <string>int main()
{// 声明一个unordered_map,键为string类型,值为int类型std::unordered_map<std::string, int> ageMap;// 向unordered_map中插入pair元素ageMap.insert(std::make_pair("Alice", 30));ageMap.insert({"Bob", 25});// 或者使用下标操作符(如果键不存在,则会自动创建该键并初始化为默认值)ageMap["Charlie"] = 35;// 访问unordered_map中的元素if (ageMap.find("Alice") != ageMap.end()) {std::cout << "Alice's age is " << ageMap["Alice"] << std::endl;}// 遍历unordered_mapfor (const auto& pair : ageMap) {std::cout << pair.first << ": " << pair.second << std::endl;}return 0;
}
tuple

tuple 叫作元组,它可以把一组类型相同或不同的元素组合到一起,且元素的数量不限,定义于<tuple>tuple 的底层原理是基于递归实现与 stl 中的容器完全不同,但在功能上,tuple 是对容器的有效补充,因为所有的容器都只能组合相同类型的元素,但tuple 可以组合任意不同类型的元素。

当需要使用2个或2个以上元素时,可以使用tuple,类似于struct结构。

常用函数方法:
  • std::get:访问std::tuple的元素。

  • 可用std::get配合std::tie修改std::tuple的元素

    由于std::tuple的元素默认是const的,因此你不能直接修改它们。

  • std::tuple_size:获取元组的大小。

  • std::tuple_element:获取元素的类型。

  • std::tuple_cat:用于合并两个或多个std::tuple

使用例子:
#include <iostream>
#include <vector>
#include <tuple>
#include <string>int main()
{// 创建一个vector,其元素类型为tuple<int, string, double>std::vector<std::tuple<int, std::string, double>> vec;// 向vector中添加元素vec.emplace_back(1, "Apple", 0.5);vec.emplace_back(2, "Banana", 1.0);vec.emplace_back(3, "Cherry", 1.5);// 遍历vector并打印每个tuple的内容for (const auto& t : vec) {std::cout << std::get<0>(t) << ", " // 获取并打印第一个元素(int)<< std::get<1>(t) << ", " // 获取并打印第二个元素(string)<< std::get<2>(t) << std::endl; // 获取并打印第三个元素(double)}return 0;   
}

推荐阅读

博客主页:https://blog.csdn.net/weixin_45068267
(客官逛一逛,有许多其它有趣的专栏博文)

C/C++专栏:https://blog.csdn.net/weixin_45068267/category_12268204.html
(内含其它STL容器使用及对应的数据结构实现)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL性能优化篇之SQL语句优化
  • Windows桌面上透明的记事本怎么设置
  • HarmonyOS(43) @BuilderParam标签使用指南
  • 捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性
  • android13 文件管理器无法安装apk 奔溃问题
  • android13 cat /proc/cupinfo没有Serial问题
  • 七款好用的公司电脑监控软件推荐|2024年电脑监控软件干货整理!
  • APP下载二维码的主要用途,制作也简单!
  • 广电影视NAS共享非编存储磁盘阵列
  • ONLYOFFICE 8.1版本版本桌面编辑器测评
  • unordered_map和set
  • VPS拨号服务器:独享的高效与安全
  • MMII 的多模态医学图像交互框架:更直观地理解人体解剖结构和疾病
  • 电脑拼图软件有哪些?盘点7种简单好用电脑拼图软件
  • 张量分解(3)——CP分解
  • Akka系列(七):Actor持久化之Akka persistence
  • canvas 五子棋游戏
  • ES6系列(二)变量的解构赋值
  • Github访问慢解决办法
  • HTTP那些事
  • Java 内存分配及垃圾回收机制初探
  • MySQL-事务管理(基础)
  • Rancher-k8s加速安装文档
  • v-if和v-for连用出现的问题
  • 利用jquery编写加法运算验证码
  • 聊聊sentinel的DegradeSlot
  • 漂亮刷新控件-iOS
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 如何正确配置 Ubuntu 14.04 服务器?
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​ubuntu下安装kvm虚拟机
  • ‌JavaScript 数据类型转换
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (排序详解之 堆排序)
  • (篇九)MySQL常用内置函数
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)平衡树
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .gitignore文件忽略的内容不生效问题解决
  • .Net Core和.Net Standard直观理解
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net Remoting常用部署结构
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net连接oracle数据库
  • .NET上SQLite的连接
  • .NET序列化 serializable,反序列化
  • .NET正则基础之——正则委托
  • .NET中的十进制浮点类型,徐汇区网站设计