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

c++中map/unordered_map的不同遍历方式以及结构化绑定

文章目录

  • 方式一:值传递遍历
  • 方式二:引用传递遍历
  • 方式三:使用迭代器遍历
  • 方式四:结构化绑定(c++17特性)
  • 结构化绑定示例
    • (1)元组tuple结构化绑定
    • (2)结构体结构化绑定
    • (3)数组结构化绑定
    • (4)普通变量结构化绑定

下面的示例都是以下列定义的map为例。

#include<iostream>
#include<unordered_map>
using namespace std;unordered_map<int, int> map = {pair<int, int>(1, 2),pair<int, int>(3, 4),pair<int, int>(5, 6)};

方式一:值传递遍历

  • 使用pair的形式进行值传递。
    for (pair<int, int> kv : my_map) {cout << kv.first << "=>" << kv.second << endl;}
  • 使用auto的形式进行值传递。
    for (auto kv : my_map) {cout << kv.first << "=>" << kv.second << endl;}

方式二:引用传递遍历

  • 使用pair的形式进行引用传递。

如果使用pair进行引用传递,必须添加const,不然会报错,const既可以添加在pair前边,也可以添加至键前面,但是它们有区别

const添加在pair前面时,键和值都不可以发生改变,如下所示。

    for (const pair<int, int>& kv : my_map) {//kv.second += 3;//pair前边添加const不可以改变它的值//kv[7] = 9 //pair前边添加const不可以添加多余的键cout << kv.first << "=>" << kv.second << endl;}

const添加在pair的key前边,my_map不可以添加新的键值对,但可以改变原先的值,如下所示。

    for (pair<const int, int>& kv : my_map) {kv.second += 3;//只对key做const,可以改变其值// kv[7] = 9 //pair前边添加const不可以添加多余的键cout << kv.first << "=>" << kv.second << endl;}
  • 使用auto的形式进行引用传递。
    for (auto& kv : my_map) {kv.second += 3;cout << kv.first << "=>" << kv.second << endl;}

方式三:使用迭代器遍历

使用自定义迭代器遍历。

    for (unordered_map<int, int>::iterator it = my_map.begin(); it != my_map.end(); it++) {cout << it->first << "=>" << it->second << endl;}

使用auto迭代器遍历。

    for (auto it = my_map.begin(); it != my_map.end(); it++) {cout << it->first << "=>" << it->second << endl;}

方式四:结构化绑定(c++17特性)

需要另外说明的是,auto[]绑定方式不仅适用于pair形式,还适用于tuple形式,搬砖的效率又提高了。。。

值传递的结构化绑定。

    for (auto [k, v] : my_map) {cout << k << "=>" << v << endl;}

引用传递的结构化绑定

    for (auto& [k, v] : my_map) {cout << k << "=>" << v << endl;}

只需要键的结构化绑定

        for (auto& [k, _] : my_map) {cout << "k" << "=>" << k << endl;}

只需要值的结构化绑定

        for (auto& [_, v] : my_map) {cout << "v" << "=>" << v << endl;}

结构化绑定示例

(1)元组tuple结构化绑定

  • 普通tie形式
# include<iostream>
# include<tuple>int main()
{std::tuple<std::string, std::string, int> my_tuple("xiaoming", "man", 20);std::string name;std::string gender;int age; std::tie(name, gender, age) = my_tuple;std::cout << name << " " <<gender<< " " << age << std::endl;;
}
  • 结构化绑定形式
# include<iostream>
# include<tuple>int main()
{std::tuple<std::string, std::string, int> my_tuple("xiaoming", "man", 20);auto [name, gender, age] = my_tuple;std::cout << name << " " <<gender<< " " << age << std::endl;;
}

(2)结构体结构化绑定

# include<iostream>struct s {std::string name = "xiaoming";std::string gender = "man";int age = 20;
};
int main()
{s my_struct;auto [name, gender, age] = my_struct;std::cout << name << " " <<gender<< " " << age << std::endl;;
}

(3)数组结构化绑定

使用数组结构化绑定的时候,元素个数也要严格对齐

# include<iostream>int main()
{int a[2] = {1,2};auto [x,y] = a;
}

(4)普通变量结构化绑定

int a = 1, b = 2;
const auto& [x, y] = std::tie(a, b); // x 与 y 类型为 int&

相关文章:

c++中map/unordered_map的不同遍历方式以及结构化绑定

文章目录方式一&#xff1a;值传递遍历方式二&#xff1a;引用传递遍历方式三&#xff1a;使用迭代器遍历方式四&#xff1a;结构化绑定(c17特性)结构化绑定示例&#xff08;1&#xff09;元组tuple结构化绑定&#xff08;2&#xff09;结构体结构化绑定&#xff08;3&#xff…...

Kafka系列之:Kraft模式

Kafka系列之:Kraft模式 一、Kraft架构二、Kafka的Kraft集群部署三、初始化集群数据目录四、创建KafkaTopic五、查看Kafka Topic六、创建生产者七、创建消费者一、Kraft架构 Kafka元数据存储在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。Kraft模式…...

动态规划:leetcode 139.单词拆分、多重背包问题

leetcode 139.单词拆分leetcode 139.单词拆分给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明&#xff1a;拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1&…...

Stable Diffusion原理详解

Stable Diffusion原理详解 最近AI图像生成异常火爆&#xff0c;听说鹅厂都开始用AI图像生成做前期设定了&#xff0c;小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像&#xff0c;背后离不开Stable Diffusion算法。 Stable Diffusion…...

webpack高级配置

摇树&#xff08;tree shaking&#xff09; 我主要是想说摇树失败的原因&#xff08;tree shaking 失败的原因&#xff09;&#xff0c;先讲下摇树本身效果 什么是摇树&#xff1f; 举个例子 首先 webpack.config.js配置 const webpack require("webpack");/**…...

jQuery 事件

jQuery 事件 Date: February 28, 2023 Sum: jQuery事件注册、处理、对象 目标&#xff1a; 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 jQuery 事件注册 单个时间注册 语法&#xff1a;…...

【批处理脚本】-2.3-解析地址命令arp

"><--点击返回「批处理BAT从入门到精通」总目录--> 共2页精讲(列举了所有arp的用法,图文并茂,通俗易懂) 目录 1 arp命令解析 1.1 询问当前协议数据,显示当前 ARP 项...

改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测

改进 YOLO V5 的密集行人检测算法研究&#xff08;2021.08&#xff09;摘 要&#xff1a;1 YOLO V52 SENet 通道注意力机制3 改进的 YOLO V5 模型3.1 训练数据处理改进3.2 YOLO V5 网络改进3.3 损失函数改进3.3.1 使用 CIoU3.3.2 非极大值抑制改进4 研究方案与结果分析4.1 实验…...

Python - Opencv应用实例之CT图像检测边缘和内部缺陷

Python - Opencv应用实例之CT图像检测边缘和内部缺陷 将传统图像处理处理算法应用于CT图像的边缘检测和缺陷检测,想要实现效果如下: 关于图像处理算法,主要涉及的有:灰度、阈值化、边缘或角点等特征提取、灰度相似度变换,主要偏向于一些2D的几何变换、涉及图像矩阵的一些统…...

管理逻辑备数据库(Logical Standby Database)

1. SQL Apply架构概述 SQL Apply使用一组后台进程来应用来自主数据库的更改到逻辑备数据库。 在日志挖掘和应用处理中涉及到的不同的进程和它们的功能如下&#xff1a; 在日志挖掘过程中&#xff1a; 1&#xff09;READER进程从归档redo日志文件或备redo日志文件中读取redo记…...

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数&#xff08;初始化列表&#xff09;前提构造函数体赋值初始化列表explicit关键字static成员概念特性&#xff08;重要&#xff09;有元友元函数友元类内部类匿名对象构造函数&#xff08;初始化列表&#xff09; 前提 前面 六个默认成员对象中我们已经学过什么是构造…...

(六十)再来看看几个最常见和最基本的索引使用规则

今天我们来讲一下最常见和最基本的几个索引使用规则&#xff0c;也就是说&#xff0c;当我们建立好一个联合索引之后&#xff0c;我们的SQL语句要怎么写&#xff0c;才能让他的查询使用到我们建立好的索引呢&#xff1f; 下面就一起来看看&#xff0c;还是用之前的例子来说明。…...

机器学习与目标检测作业(数组相加:形状需要满足哪些条件)

机器学习与目标检测&#xff08;数组相加:形状需要满足哪些条件&#xff09;机器学习与目标检测&#xff08;数组相加:形状需要满足哪些条件&#xff09;一、形状相同1.1、形状相同示例程序二、符合广播机制2.1、符合广播机制的描述2.2、符合广播机制的示例程序机器学习与目标检…...

CentOS救援模式(Rescue Mode)及紧急模式(Emergency Mode)

当CentOS操作系统崩溃&#xff0c;无法正常启动时&#xff0c;可以通过救援模式或者紧急模式进行系统登录。启动CentOS, 当出现下面界面时&#xff0c;按e进入编辑界面。在编辑界面里&#xff0c;加入参数&#xff1a;systemd.unitrescue.target &#xff0c;然后Ctrl-X启动进入…...

从面试官角度告诉你高级性能测试工程师面试必问的十大问题

目录 1、介绍下最近做过的项目&#xff0c;背景、预期指标、系统架构、场景设计及遇到的性能问题&#xff0c;定位分析及优化&#xff1b; 2、项目处于什么阶段适合性能测试介入&#xff0c;原因是什么&#xff1f; 3、性能测试场景设计要考虑哪些因素&#xff1f; 4、对于一…...

通过知识库深度了解用户的心理

自助服务知识库的价值是毋庸置疑的&#xff0c;如果执行得当&#xff0c;可以帮助减少客户服务团队的工作量&#xff0c;仅仅编写内容和发布是不够的&#xff0c;需要知道知识库对客户来说是否有用&#xff0c;需要了解客户获得的反馈&#xff0c;如果你正确的使用知识库软件&a…...

HiveSQL一天一个小技巧:如何将分组内数据填充完整?

0 需求1 需求分析需求分析&#xff1a;需求中需要求出分组中按成绩排名取倒数第二的值作为新字段&#xff0c;且分组内没有倒数第二条的时候取当前值。如果本题只是求分组内排序后倒数第二&#xff0c;则很简单&#xff0c;使用row_number()函数即可求出&#xff0c;但是本题问…...

【亲测可用】BEV Fusion (MIT) 环境配置

CUDA环境 首先我们需要打上对应版本的显卡驱动&#xff1a; 接下来下载CUDA包和CUDNN包&#xff1a; wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run sudo sh cuda_11.6.2_510.47.03_linux.runwget htt…...

【调试方法】基于vs环境下的实用调试技巧

前言&#xff1a; 对万千程序猿来说&#xff0c;在这个世界上如果有比写程序更痛苦的事情&#xff0c;那一定是亲手找出自己编写的程序中的bug&#xff08;漏洞&#xff09;。作为新手在我们日常写代码中&#xff0c;经常会出现报错的情况&#xff08;好的程序员只是比我们见过…...

单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)

一、RBF神经网络 1988年&#xff0c;Broomhead和Lowc根据生物神经元具有局部响应这一特点&#xff0c;将RBF引入神经网络设计中&#xff0c;产生了RBF(Radical Basis Function)。1989年&#xff0c;Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。 RBF的基本思想是…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...