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

pair 是什么,什么时候该用它
std::pair 是 C++ 标准库中一个轻量级的模板结构体,用来把两个不同类型(或相同类型)的值打包成一个单元。它不是容器,不支持增删元素,只管存两个东西:first 和 second。常见于需要“临时配对”的场景,比如:
• 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.first 和 p1.second,不能用下标或迭代器
注意:first 和 second 是 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::string 和 std::vector 都重载了 ==
• std::pair 不支持 ==(指针比较的是地址,不是所指内容)
• 移动构造/赋值会触发成员的移动(如果它们支持),但如果你存的是自定义类,要确保它有移动语义或至少有拷贝构造
• 别把 std::pair 当 std::tuple 用——后者支持 std::get、结构化绑定更灵活,而 pair 就是专为“二元组”设计的简洁替代
立即学习“C++免费学习笔记(深入)”;









