0

0

C++中的std::pair和std::tuple如何使用?(代码示例)

冰火之心

冰火之心

发布时间:2026-01-05 17:42:09

|

453人浏览过

|

来源于php中文网

原创

std::pair适用于两个元素的组合,如键值对;std::tuple支持任意数量和类型的组合,适用于三及以上元素场景。二者均支持结构化绑定,但pair用.first/.second访问,tuple需std::get或tie解包。

c++中的std::pair和std::tuple如何使用?(代码示例)

std::pair 和 std::tuple 都是 C++ 标准库中用于组合多个值的轻量级容器,但适用场景不同:pair 专用于两个元素,tuple 更通用,支持任意数量、不同类型。

std::pair:固定两个元素的组合

常用于键值对(如 map 的 value_type)、函数返回多个结果、临时打包两个相关数据。

声明方式:std::pair,可通过 make_pair{} 初始化。

  • 访问成员用 .first.second
  • 支持比较操作(字典序)和结构化绑定(C++17 起)

示例:

立即学习C++免费学习笔记(深入)”;

#include 
#include 
#include 

int main() { // 方式1:显式类型 + make_pair auto p1 = std::make_pair(42, "hello");

// 方式2:直接初始化(推荐,更简洁)
std::pair p2{100, "world"};

// 方式3:结构化绑定(C++17)
auto [num, msg] = p2;  // num = 100, msg = "world"
std::cout << num << ": " << msg << "\n";  // 输出:100: world

// 修改
p2.first = 999;
p2.second += "!";

}

std::tuple:任意数量、任意类型的组合

适合需要打包 3 个及以上值,或类型不统一的场景(比如函数返回状态码+结果+错误信息)。

声明方式:std::tuple,常用 std::make_tuple{} 构造。

《PHP设计模式指南》中文版
《PHP设计模式指南》中文版

《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员

下载
  • 访问元素用 std::get(t)(按索引)或结构化绑定(推荐)
  • 支持 std::tie 解包到已有变量(常用于接收函数返回的 tuple)
  • 不能用 .first/.second,也不支持直接比较(需手动定义或用 std::tie 比较)

示例:

立即学习C++免费学习笔记(深入)”;

#include 
#include 
#include 

// 模拟一个可能失败的计算函数 std::tuple compute(int x) { if (x < 0) return {false, 0, "negative input"}; return {true, x * x, "success"}; }

int main() { // 创建 tuple auto t = std::make_tuple(3.14, 'A', 42, std::string("ok"));

// 结构化绑定(C++17)
auto [pi, ch, n, s] = t;  // 类型自动推导
std::cout << pi << ", " << ch << ", " << n << ", " << s << "\n";

// 接收函数返回值并解包
bool ok;
int result;
std::string msg;
std::tie(ok, result, msg) = compute(-5);
std::cout << "Success: " << ok << ", Result: " << result << ", Msg: " << msg << "\n";

// 或直接用结构化绑定接收
auto [success, val, desc] = compute(7);
std::cout << "7² = " << val << " (" << desc << ")\n";

}

选择建议与注意事项

优先用 pair 当只有两个值且语义明确(如坐标、键值、成功/失败标志);用 tuple 当元素数 ≥3,或类型差异大、无通用命名习惯。

  • pair 是 tuple 的特化,性能几乎一致,但 pair 更语义清晰
  • tuple 元素类型必须在编译期确定,不能动态增删
  • 访问 tuple 元素时,索引越界(如 get(t) 但 t 只有 3 个元素)是编译错误
  • 若需命名字段,考虑自定义 struct,比 tuple 更可读、可维护

常见搭配技巧

pair 和 tuple 经常和标准算法、容器一起使用。

  • map 的迭代器解引用得到 pair
  • std::sort 支持 tuple/pair 的默认字典序比较,适合多级排序
  • 结合 std::apply 可将 tuple 元素作为参数调用函数

排序示例:

#include 
#include 
#include 

int main() { std::vector> data = { {2, "apple", 3.5}, {1, "banana", 2.1}, {2, "cherry", 1.9} };

// 默认按 first → second → third 字典序升序
std::sort(data.begin(), data.end());

// 自定义:先按 third 降序,再按 first 升序
std::sort(data.begin(), data.end(), [](const auto& a, const auto& b) {
    if (std::get<2>(a) != std::get<2>(b))
        return std::get<2>(a) > std::get<2>(b);
    return std::get<0>(a) < std::get<0>(b);
});

}

相关专题

更多
sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

381

2023.09.04

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

520

2023.09.20

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

26

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

57

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

32

2025.11.27

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

394

2023.08.14

python创建txt文件教程大全
python创建txt文件教程大全

本专题整合了python创建txt文件相关教程,阅读专题下面的文章了解更多详细内容。

10

2026.01.06

python去掉字符串空格教程大全
python去掉字符串空格教程大全

本专题整合了python去掉字符串空格教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号