C++ pair怎么用 C++成对数据组合使用方法演示【基础】

发布时间 - 2026-02-02 00:00:00    点击率:
std::pair 是 C++ 中用于打包两个值的轻量级模板结构体,适用于需临时配对的场景,如 map 迭代、多返回值、sort 比较等;通过 first/second 成员直接访问,常用 make_pair 构造。

pair 是什么,什么时候该用它

std::pair 是 C++ 标准库中一个轻量级的模板结构体,用来把两个不同类型(或相同类型)的值打包成一个单元。它不是容器,不支持增删元素,只管存两个东西:firstsecond。常见于需要“临时配对”的场景,比如:
std::map 的迭代器解引用返回的就是 pair
• 函数需要同时返回两个值(比如搜索函数返回是否找到 + 索引)
• 作为 std::sort 自定义比较的中间结果
• 和 std::make_pair 配合快速构造,避免写冗长的模板参数

怎么创建和访问 pair

最常用的是 std::make_pair,它能自动推导类型,省得手写 std::pair 这种长名:
auto p1 = std::make_pair(42, "hello"); → 类型是 std::pair
std::pair<:string double> p2{"pi", 3.14159}; → 直接初始化,C++11 起支持
访问必须用点号:p1.firstp1.second,不能用下标或迭代器
注意:firstsecond 是 public 成员,可直接读写,但不能通过 std::get(p) 访问(那是 std::tuple 的用法)

pair 在 map 和算法里怎么配合用

std::

map 内部存储的就是 std::pair,所以遍历时直接解包:
for (const auto& kv : my_map) { std::cout "
• 想按 value 排序?得先把 map 搬进 vector:std::vector<:pair std::string>> v(my_map.begin(), my_map.end());,再用 std::sort(v.begin(), v.end(), [](const auto& a, const auto& b) { return a.second
注意:map 的 key 是 const 的,所以 kv.first 只能读,不能赋值;而 kv.second 可写(如果 value 类型允许)

容易踩的坑:类型匹配、移动语义和比较规则

std::pair 的比较操作符(==)默认按字典序:先比 first,相等再比 second。但前提是两个成员都支持对应操作:
std::pair<:string std::vector>> 支持 ==,因为 std::stringstd::vector 都重载了 ==
std::pair 不支持 ==(指针比较的是地址,不是所指内容)
• 移动构造/赋值会触发成员的移动(如果它们支持),但如果你存的是自定义类,要确保它有移动语义或至少有拷贝构造
• 别把 std::pairstd::tuple 用——后者支持 std::get、结构化绑定更灵活,而 pair 就是专为“二元组”设计的简洁替代


# ai  # c++  # 标准库  # sort  # for  # const  # auto  # 结构体  # public  # map  # 算法  # 的是  # 自定义  # 不支持  # 迭代  # 如果你  # 那是  # 什么时候  # 适用于  # 再用  # 不能用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: Laravel API资源类怎么用_Laravel API Resource数据转换  历史网站制作软件,华为如何找回被删除的网站?  js代码实现下拉菜单【推荐】  如何在景安云服务器上绑定域名并配置虚拟主机?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  Mybatis 中的insertOrUpdate操作  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Python面向对象测试方法_mock解析【教程】  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  Linux系统命令中screen命令详解  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何构建满足综合性能需求的优质建站方案?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  JS去除重复并统计数量的实现方法  Android 常见的图片加载框架详细介绍  如何用美橙互联一键搭建多站合一网站?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Linux系统命令中tree命令详解  Laravel中的Facade(门面)到底是什么原理  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  在线制作视频网站免费,都有哪些好的动漫网站?  深圳网站制作平台,深圳市做网站好的公司有哪些?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  Python图片处理进阶教程_Pillow滤镜与图像增强  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  如何在IIS服务器上快速部署高效网站?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  详解阿里云nginx服务器多站点的配置  Laravel如何处理文件下载请求?(Response示例)  七夕网站制作视频,七夕大促活动怎么报名?  再谈Python中的字符串与字符编码(推荐)  java获取注册ip实例  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Android利用动画实现背景逐渐变暗  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  大型企业网站制作流程,做网站需要注册公司吗?  JavaScript数据类型有哪些_如何准确判断一个变量的类型  *服务器网站为何频现安全漏洞?  PythonWeb开发入门教程_Flask快速构建Web应用  SQL查询语句优化的实用方法总结  焦点电影公司作品,电影焦点结局是什么?  如何快速搭建高效WAP手机网站?  HTML 中动态设置元素 name 属性的正确语法详解