pair与tuple
pair
pair是 C++ STL(标准模板库)中的一个模板类,用于表示一对相关的对象。它是一个简单的容器,存储两个数据项,它们可以是不同类型的。pair 常用于需要将两个元素一起操作的情况,例如在处理字典(映射)数据结构时,键值对就是一个常见的 pair 示例。
#include <iostream>
#include <utility> // 引入pair的定义int main() {// 创建一个pairstd::pair<int, std::string> p(1, "Hello");std::cout << "First: " << p.first << std::endl; // 输出: First: 1std::cout << "Second: " << p.second << std::endl; // 输出: Second: Helloreturn 0;
}
使用场景
键值对:pair 在处理映射(map)时非常有用,std::map 容器中的元素类型就是 pair,它表示一个键值对。
std::map<int, std::string> m;
m[1] = "Apple";
m[2] = "Banana";for (const auto& p : m) {std::cout << p.first << " -> " << p.second << std::endl;
}
返回多个值:在函数中返回多个值时,pair 可以作为一个简单的解决方案。
std::pair<int, std::string> getData() {return std::make_pair(1, "Result");
}
双指针优化:
排序:首先对 a 和 b 进行排序,这样我们可以通过双指针优化来减少比较次数。
双指针逻辑:
i 和 j 分别指向 a 和 b 的当前元素。
计算 a[i] 和 b[j] 的绝对差 diff,并更新最小差值 minDiff。
如果当前差值小于 minDiff,则更新 minDiff 并清空结果列表 ans,然后加入当前对。
如果差值相等,直接将当前对加入 ans。
根据 a[i] 和 b[j] 的大小关系,移动指针 i 或 j。如果 a[i] 小于 b[j],则移动 i,否则移动 j。
输出:最终输出最小差值以及所有具有该差值的整数对。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;int main(){vector<int> a = {2, 8, 7, 5, 11};vector<int> b = {22, 15, 12, 31, 3};// 对两个向量进行排序sort(a.begin(), a.end());sort(b.begin(), b.end());int an = a.size(), bn = b.size();vector<pair<int, int>> ans;int i = 0, j = 0, minDiff = INT_MAX;// 双指针遍历while(i < an && j < bn) {int diff = abs(a[i] - b[j]);// 更新最小差值和结果if(diff < minDiff) {minDiff = diff;ans.clear();ans.push_back({a[i], b[j]});} else if(diff == minDiff) {ans.push_back({a[i], b[j]});}// 移动指针if(a[i] < b[j]) {i++;} else {j++;}}// 输出最小差值cout << minDiff << endl;for(const auto& p : ans) {cout << "[" << p.first << " , " << p.second << "]" << endl;}return 0;
}
面试题
给定两个整数数组 a 和 b,找出所有数对 (a[i], b[j]),使得 |a[i] - b[j]| 的差值最小,并输出这些数对以及最小差值。
#include<iostream>
#include<vector>
using namespace std;int main(){vector<int> a = {2,8,7,5,11};vector<int> b = {22,15,12,31,3};int an = a.size(),bn = b.size();vector<pair<int,int>> ans;int c,min = INT_MAX;for(int i = 0; i < an; i++){for(int j = 0;j < bn; j++){c = abs(a[i] - b[j]);if(c < min){min = c;ans.clear();ans.push_back({a[i], b[j]});} else if(c == min){ans.push_back({a[i], b[j]});}}}cout << min << endl;for(int i = 0; i < ans.size(); i++){cout << "[" <<ans[i].first <<" ," << ans[i].second << "]" << endl;}return 0;
}
关于map
在 C++ 中,std::map 是一个关联容器,它存储的是一组键值对,并且根据键值进行排序。每个键值对是一个 pair 对象,其中第一个元素是键,第二个元素是对应的值。std::map 会自动根据键进行排序,默认情况下是按照升序排列。
#include <iostream>
#include <map>
#include <string>int main() {// 创建一个mapstd::map<int, std::string> m;// 插入元素m.insert({1, "Apple"});m.insert({2, "Banana"});m[3] = "Cherry"; // 使用 [] 操作符插入// 修改值m[2] = "Blueberry";// 查找元素if (m.find(1) != m.end()) {std::cout << "Found key 1: " << m[1] << std::endl;}// 遍历mapfor (const auto& kv : m) {std::cout << kv.first << " -> " << kv.second << std::endl;}// 删除元素m.erase(2);// 输出map大小std::cout << "Map size: " << m.size() << std::endl;return 0;
}
tuple
std::tuple 是 C++ 标准库中的一个容器类型,它允许存储多个异构类型的元素。与数组和 std::vector 等容器不同,std::tuple 允许存储不同类型的数据,且可以存储任意数量的元素。std::tuple 是一个模板类,支持与 C++ 中的其他容器一起使用,并具有强大的访问和操作功能。
#include <iostream>
#include <tuple>int main() {// 创建一个包含不同类型元素的tuplestd::tuple<int, double, std::string> t(1, 3.14, "Hello");std::cout << "First: " << std::get<0>(t) << std::endl; // 输出: First: 1std::cout << "Second: " << std::get<1>(t) << std::endl; // 输出: Second: 3.14std::cout << "Third: " << std::get<2>(t) << std::endl; // 输出: Third: Helloreturn 0;
}
解包
std::tuple<int, double, std::string> t(1, 3.14, "Hello");// 使用结构化绑定解包tuple
auto [x, y, z] = t;
std::cout << x << ", " << y << ", " << z << std::endl; // 输出: 1, 3.14, Hello
合并
std::tuple<int, double> t1(1, 3.14);
std::tuple<std::string, char> t2("Hello", 'A');auto t3 = std::tuple_cat(t1, t2);std::cout << std::get<0>(t3) << ", " << std::get<1>(t3) << ", " << std::get<2>(t3) << ", " << std::get<3>(t3) << std::endl;
解构
std::tuple<int, double, std::string> t(1, 3.14, "Hello");
int x;
double y;
std::string z;std::tie(x, y, z) = t;std::cout << x << ", " << y << ", " << z << std::endl; // 输出: 1, 3.14, Hello
相关文章:
pair与tuple
pair pair是 C STL(标准模板库)中的一个模板类,用于表示一对相关的对象。它是一个简单的容器,存储两个数据项,它们可以是不同类型的。pair 常用于需要将两个元素一起操作的情况,例如在处理字典(…...
RecyclerView 和 ListView从 设计理念、性能优化 和 扩展能力 三个维度展开分析
一、RecyclerView 的核心定义(设计理念) RecyclerView 是 Android Jetpack 中的高级滚动容器,用于展示大数据集,其核心特性包括: 模块化设计:分离布局管理(LayoutManager)、动画&am…...
望远镜自动调焦怎样利用直线轴承结构?
以下是对望远镜调焦结构相关内容的分析: 调焦结构基本构成与原理 驱动部分:采用步进电机驱动滚珠丝杠,步进电机能够精确控制转动角度和步数,从而精确控制滚珠丝杠的转动,为调焦提供动力来源。 传动部分:…...
C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件
目录 1.启动epoll模型 2.和客户端建立新连接 3.接受客户端Http请求数据 4.代码回顾从接受的数据中读出请求行 5.请求行解析 6.正则表达式以及匹配 7.解析请求行以及后续处理 8.对path处理说明 9.如何回复响应数据 10.对文件对应content-type如何查询 11.服务器处理流…...
Explain的使用
1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id selecttype table type possible_keys key key_len ref rows extra各列。 其中, type=const表示通过索引一次就找到了; key=primary的话,表示使用了主键; type=all,表示为全表…...
DDoS防御与流量优化
实训背景 某在线游戏平台遭受频繁DDoS攻击,需部署Linux网关实现以下防护与优化功能: 防御SYN洪水攻击:自动识别并拦截高频SYN请求。连接数限制:限制单个IP的最大并发连接数为100,防止资源耗尽。流量优先级保障&#…...
文件上传漏洞原理学习
什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全&#…...
005.Gitlab CICD变量使用
文章目录 变量介绍预定义变量项目信息类版本控制类流水线执行类runner环境类作业执行类容器注册类其他类别 自定义变量 变量使用预定义变量使用创建流水线提交流水作业 自定义变量使用创建流水线提交流水作业 图形UI创建变量UI自定义变量创建流水线提交流水作业 变量介绍 预定…...
即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?
BeeWorks作为一款专为企业设计的即时通讯平台,高度重视用户隐私安全,采取了多种措施来保障数据的保密性、完整性和可用性。 首先,BeeWorks采用私有化部署模式,企业可以将服务器架设在自己的网络环境中,所有通讯数据&a…...
高可用架构:Keepalived、Nginx与Docker深度解析
本文深入解析了Keepalived技术,阐述其基于VRRP协议实现高可用的核心功能,包括虚拟路由器冗余、健康检查、负载均衡集成及脚本执行与通知。同时,设计了Nginx高可用方案,涵盖双机主从、主主及多点集群模式,分析其优缺点。…...
127.0.0.1本地环回地址(Loopback Address)
127.0.0.1 是计算机网络中的一个特殊IPv4地址,称为本地环回地址(Loopback Address),主要用于以下用途: 1. 基本定义 本地主机(Localhost):该地址始终指向当前正在使用的计算机本身&a…...
Windows Terminal 美化增强攻略 2.0:打造个性化高效开发环境(快捷键介绍、编程语言环境、starship美化、高效命令行工具)
前言:从 1.0 到 2.0,终端美化进阶之旅 去年,我曾在文章《使用 oh-my-posh 和 clink 打造个性化 PowerShell 和 CMD》中分享了 Windows 终端的美化方案。那时,我选择了 oh-my-posh 作为核心工具,虽然效果不错ÿ…...
网络出故障时,四大表(MAC表、ARP表、路由表、转发表)怎么查?看看这套排查顺序
网络出故障时,四大表 (MAC表、ARP表、路由表、转发表) 怎么查 说正题之前,我们先来假设一个场景: 场景假设: 一台华为设备突然上不了网,或者访问某个 IP 不通。 你会怎么排查? 别慌,兄弟&a…...
第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型
Unity Shader的学习笔记 第七天 开始Unity Shader的学习之Unity中的基础光照之高光反射光照模型 文章目录 Unity Shader的学习笔记前言一、高光反射光照模型1.逐顶点光照① Properties② 顶点着色器中计算高光specular③ Fallback效果展示 2.逐像素光照① 片元着色器输出结构体…...
《从 MyBatis-Plus 到 Elasticsearch:一个后端的性能优化踩坑实录》
最近接手了一个老项目,单表查询用 MyBatis-Plus 写得飞起,但一到多表关联模糊搜索就卡成 PPT。痛定思痛,决定引入 Elasticsearch 优化查询性能,结果踩坑无数……记录下这次从 ORM 到搜索引擎的升级历程&#…...
docker 常用指令整理
以下是Docker常用操作指令的整理,分为镜像管理、容器操作、网络配置、数据卷管理、Docker Compose及系统维护等部分: 一、镜像管理 拉取镜像 docker pull [镜像名]:[标签] # 默认标签为latest # 示例:拉取Ubuntu 20.04镜像 docker pull ubun…...
密码格式校验c#和js两种
if (!IsValidPassword(xinmima)) { //在前端校验过了,这里不需要 ClientScript.RegisterStartupScript(GetType(), "", "alert(新密码必须至少8位,且至少包含大写字母、小写字母、数字、特殊符号中的3种)", true); } /// <summary> …...
线程控制
POSIX线程库 与线程有关的函数构成了⼀个完整的系列,绝⼤多数函数的名字都是以“pthread_”打头的要使⽤这些函数库,要通过引入头文件<pthread.h>链接这些线程函数库时要使⽤编译器命令的“-lpthread”选项 eg: g -o $ $^ -lpthread这个pthread库…...
WebView 与 JavaScript 的交互
从技术深度、安全意识 和 实战经验来介绍。以下是分层次的回答策略,从基础到高级逐步深入: 1. 基础实现 回答要点: "Android 和 JavaScript 的交互主要通过 WebView 的两种方式实现: Android 调用 JS: kotlin we…...
解决word中公式大小不一问题
文章目录 前言一、初见端倪二、解决方法三、题外话 前言 记录一下在 word 中使用 mathtype 编辑公式时出现的公式字体大小不一的问题的解决方法。 一、初见端倪 最近在 word 中使用 mathtype 进行公式编辑,刚开始编辑的公式并没有什么问题,过了几天后再…...
Haply与PickNik合作:Inverse3三轴力反馈控制器集成MoveIt Pro,提升机器人操作精度
Haply Robotics与PickNik Robotics合作,将Inverse3力反馈控制器集成到MoveIt Pro平台,优化人机交互,提升机器人操作精度。实时力反馈技术使操作者感知机器人与环境的交互力,增强远程操作的精确度和灵敏度,推动机器人技…...
【Linux笔记】文件的传输(scp、rsync、归档、压缩)
一、sshd 1、概念 在Linux系统中,文件传输常依赖于SSH协议(Secure Shell),而sshd(OpenSSH Daemon)是负责处理SSH连接的后台服务程序。通过sshd,用户可以在加密的通道中进行安全的远程登录、命…...
单位矩阵的特点
《单位矩阵的特性与重要性质》 单位矩阵是一种特殊的方阵,具有以下特点: 主对角线元素全为 1:单位矩阵 I n I_n In是一个 n n n\times n nn的方阵,其主对角线(从左上角到右下角的对角线)上的元素均为 …...
AI处理漫画转视频
AI处理漫画转视频 第一步 从漫画PDF文件读取图片 第二部 图片信息剪裁 第三步 OCR识别处理图片,获取漫画对应的文本信息 第四步 运用阿里云通义大模型千文处理提取的文本信息更符合文本语言 第五步 运用FishVideo大模型将文本信息转变为对应的语音 第六步 图片转视…...
三维空间中的离散曲线段匹配方法
基于离散 F r e ˊ c h e t Fr\{e}chet Freˊchet距离实现工程中的三维曲线段匹配 在自动驾驶系统中, 准确匹配相邻车道线是实现安全导航, 变道决策和路径规划的核心任务. 由于道路网络存在交叉口, 弯道, 多车道并行等复杂场景, 如何衡量目标车道曲线与其他候选车道线的空间关…...
HTML的Canvas元素
<Canvas>元素 <Canvas>元素是HTML5引入的一个强大的绘图元素,它允许通过 JavaScript 在网页上动态绘制图形、动画和交互式内容。需要注意的是,<Canvas>元素只是图形的一个容器,绘制图形必须使用Javascript。 空画布 <…...
Django学习记录-2-数据库
Django学习记录-2-数据库 文章目录 Django学习记录-2-数据库参考贴连接数据库后台查看数据库后台改为中文 table增删改查Python使用hash保持一致 虽然网上教程都很多,但是感觉自己记录一下才属于自己,之后想找也方面一点,文采不佳看的不爽可绕…...
qq邮箱群发程序
1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击,进入UI编辑界面: 点击第三步后进入QT的UI设计界面,通过点击按钮进行界面设计,设计后进行保存到当前Pycharm…...
spring mvc 中 RestTemplate 全面详解及示例
RestTemplate 全面详解及示例 1. RestTemplate 简介 定义:Spring 提供的同步 HTTP 客户端,支持多种 HTTP 方法(GET/POST/PUT/DELETE 等),用于调用 RESTful API。核心特性: 支持请求头、请求体、URI 参数的…...
openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0
openEuler-22.03-LTS-SP3 编译安装 Greenplum-db 6.20.0 1、配置 yum 华为源2、安装依赖3、源码安装 openssl 1.0.1u3.1、openssl 1.1.1 降级到 openssl 1.0.1 4、源码安装 python 2.75、使用 pip3 安装 Python 相关依赖6、编译安装 Greenplum-db 6.20.06.1、修改配置6.2、基于…...
天锐蓝盾多模式加密技术,构筑企业数据安全堡垒
一旦企业发生数据泄露,将遭受严重的经济损失,声誉也会一落千丈,甚至可能在激烈的竞争中陷入绝境。那么,企业究竟该如何守护敏感数据,筑牢数据安全的 “护城河” 呢?天锐蓝盾数据泄露防护系统给出了全面且专…...
可编辑37页PPT | 建筑行业DeepSeek日常实操培训
荐言摘要:随着人工智能技术的快速发展,DeepSeek作为一款具有创新性的AI工具,正逐步渗透到建筑行业的各个环节。为帮助建筑行业从业者掌握DeepSeek的核心功能与应用技巧,提升工作效率与决策能力,特推出本次建筑行业Deep…...
C语言指针和函数
文章目录 C语言指针和函数一、指针与函数1.传递指针给函数2.指针函数3.函数指针4.回调函数 二、多级指针三、空指针四、野指针 C语言指针和函数 在C语言的编程领域中,指针是一把强大而又危险的“双刃剑”。它不仅能够直接操作内存,提升程序的运行效率&a…...
左右开弓策略思路
一、策略概述 本策略是一种基于多种技术指标的复杂交易策略,包括自定义指标计算、过滤平滑处理以及交易信号生成。 该策略通过不同的交易平台代码段实现,旨在通过分析历史价格数据来预测未来价格走势,并据此生成交易信号。 二、主要技术指标…...
mapbox基础,加载F4Map二维地图
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性二、🍀F4Map 简介2.1 ☘️技术特点2.2 ☘️核…...
doxygen自动生成文档,注释容易错位的补充
开发过程中,为了简化api开发文档的编写工作,我们可以使用doxygen的标注来进行文档注释,最后自动化的生成相关文档: 参考:https://developer.aliyun.com/article/935529 参考:https://blog.csdn.net/qq_3459…...
git操作0409
git init git add. git commit -m "Initial commit" git checkout 7890abc # 切换到旧版本代码(只读) git checkout master # 切回最新版本 git checkout -b new_branch 789abcd # 或 git checkout -b new_branch HEAD~3 很重点 git reflog …...
电阻的额定功率与额定电压详解
一、基本定义 额定功率(Rated Power) 定义:电阻在长期安全工作时允许消耗的最大功率,超过此值可能导致过热甚至烧毁。 公式: P I R 或 P V / R (I:电流,V:电压&#…...
【后端开发】SpringBoot与Spring MVC
文章目录 创建项目目录介绍Spring MVCservletMVCSpring MVCSpringboot与Spring MVC的区别Spring MVC交互 创建项目 新建一个Springboot项目 对应描述 目录介绍 src/main/java:Java 源代码 src/main/resources:为静态资源或配置⽂件: ----…...
如何禁用 PyCharm 的测试功能
如何禁用 PyCharm 的测试功能? PyCharm 的测试功能默认会自动检测项目中符合命名规则的测试文件(如以 test_ 开头的文件)并关联测试框架。若需禁用该功能,可通过以下方法操作: 方法一:全局禁用默认测试框架…...
【Spiffo】光速项目:LVGL v9框架下的MIPI简易相机_Part2
简介 本期接上回的工程部署讲一下整个工程的框架逻辑以及相关的模块作用机制,包括mipi抓图像以及后续传递到显示屏的链路逻辑等。 一、核心逻辑 1、如何抓到图像数据并显示 首先能够从摄像头捕获画面并显示是一个相机最起码要能实现的功能。所以先要搞清楚整个链…...
pycharm编译部署智能合约(solcx与web3搭配)
solcx 是一个 python 库,提供了 solidity 编译器的 python 绑定。它使开发者能够直接从 python 中编译 solidity 源代码,生成以太坊智能合约的字节码(Bytecode)和 ABI(Application Binary Interface)。这个库通常用于与 Web3 库配合使用,帮助开发者进行智能合约的部署、…...
微信小程序中的openid的作用
微信小程序中的openid的作用 引言 在当今数字化时代,用户体验成为了产品成功与否的关键因素之一。微信小程序作为连接用户与服务的重要桥梁,在提升用户体验方面发挥着重要作用。其中, openid(开放身份标识符)是微信小…...
AAAI 2025新研究!大语言模型+MARL=论文新思路?
最新研究显示,多智能体强化学习(MARL)正迎来一系列技术革新,让AI系统真正具备“群体智能”。同济大学团队提出的动态图通信网络(TGCNet),通过Transformer建模智能体间的动态协作关系,…...
旅行世界宠物养殖合成游戏源码
旅行世界宠物养殖合成游戏源码,游戏养成类系统,用户能够通过养狗和参加其他活动获取算力,每日任务不断更新,完结即可收取算力,算力能够兑换现金红包。 邀请好友得两级活跃收益提成,徒弟B100.%,徒…...
列表之链表_C
数据结构(邓俊辉):列表及相关概念_listnodeposi-CSDN博客 #include <stdio.h> #include <stdlib.h>// 定义Rank类型为int typedef int Rank;// 定义ListNode结构体 typedef struct ListNode {int data;struct ListNode* pred;st…...
图解Java设计模式
1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍...
CCF GESP Python编程 四级认证真题 2025年3月
Python 四级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D C B C D C A A D B D A C B C 1 单选题(每题 2 分,共 30 分) 第 1 题 2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是…...
2025最新系统 Git 教程(四)
2.6 Git 基础 - 打标签 打标签 像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。 在本节中…...
数学知识——欧拉函数
欧拉函数 1 ∼ N 1∼N 1∼N 中与 N N N互质的数的个数被称为欧拉函数,记为 ϕ ( N ) \phi(N) ϕ(N)。 欧拉函数 对于 N p 1 α 1 p 2 α 2 p 3 α 3 . . . p k α k Np_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3}...p_k^{\alpha_k} Np1α1p2α2p3α3…...