「C/C++」C++11 之 std::pair单元存储的途径

ops/2024/11/2 12:25:04/

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

    • std::pair:C++标准库中的灵活搭档
      • 一、`std::pair`的定义
      • 二、`std::pair`的构造与初始化
      • 三、`std::pair`的成员函数
      • 四、`std::pair`的应用场景
      • 五、注意事项
      • 结语

std::pair:C++标准库中的灵活搭档

在C++编程中,std::pair是标准模板库(STL)中的一个非常实用且简洁的工具。它提供了一种便捷的方式来存储和管理两个相关联的值,这两个值可以是不同类型的。std::pair广泛用于各种算法和数据结构中,如映射(std::map)、集合(std::set)等。本文将深入探讨std::pair的定义、用法、特性和一些实际应用场景。

一、std::pair的定义

std::pair位于头文件<utility>中,它是一个模板类,用于存储一对值。这两个值分别称为firstsecond,它们可以是任意类型(包括自定义类型),但通常是相关或成对的。std::pair的定义如下:

template< class T1, class T2 >
struct pair;

其中,T1T2分别是firstsecond的类型。

二、std::pair的构造与初始化

std::pair可以通过多种方式构造和初始化:

  1. 默认构造:创建一个firstsecond都使用默认构造函数的pair对象。

    std::pair<int, std::string> p; // p.first默认为0,p.second默认为空字符串
    
  2. 直接初始化:使用括号直接提供firstsecond的值。

    std::pair<int, std::string> p(1, "Hello"); // p.first = 1, p.second = "Hello"
    
  3. 列表初始化(C++11及以上):使用花括号进行初始化。

    std::pair<int, std::string> p{1, "Hello"}; // 同上
    
  4. 通过std::make_pair:这是一个非常方便的函数,可以自动推导类型。

    auto p = std::make_pair(1, "Hello"); // p的类型为std::pair<int, std::string>
    

三、std::pair的成员函数

std::pair提供了一些成员函数和操作符,方便我们进行操作:

  • 成员变量

    • first:第一个元素。
    • second:第二个元素。
  • 成员函数

    • std::pair::get<>():C++11引入,通过索引或类型获取元素,支持常量访问。

      std::pair<int, std::string> p(1, "Hello");
      int firstValue = p.get<0>(); // 1
      std::string secondValue = p.get<std::string>(); // "Hello"
      
  • 比较操作符==, !=, <, <=, >, >=,这些操作符按照字典序比较firstsecond

四、std::pair的应用场景

std::pair的灵活性和通用性使其在多种场景中非常有用:

  1. 映射键值对:在std::mapstd::unordered_map中,std::pair用于存储键值对,其中first是键,second是值。

    std::map<int, std::string> myMap;
    myMap[1] = "One"; // 实际上存储的是std::pair<int, std::string>(1, "One")
    
  2. 返回值:当函数需要返回两个相关联的值时,可以使用std::pair

    std::pair<int, bool> divide(int a, int b) {if (b == 0) return {0, false}; // 除以0错误return {a / b, true};
    }
    
  3. 临时存储:在算法中,std::pair可用于临时存储一对值,例如,在排序操作中保存原始索引和值。

    std::vector<std::pair<int, int>> vec = {{3, 1}, {1, 2}, {2, 3}};
    std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) {return a.second < b.second; // 按second排序
    });
    

五、注意事项

  • 虽然std::pair非常灵活,但在大型项目中,如果频繁使用且类型固定,考虑定义自定义结构体或类,以提高代码的可读性和可维护性。
  • 使用std::make_pair时,可以避免手动指定类型,提高代码的简洁性和类型安全性。

结语

std::pair是C++标准库中一个非常实用且功能强大的工具,它提供了一种简单而有效的方式来存储和管理成对的值。通过了解其定义、构造方式、成员函数和应用场景,我们可以更加高效地利用这一特性,编写出更加简洁、清晰和健壮的代码。无论是处理映射中的键值对,还是作为函数返回值的载体,std::pair都是不可多得的好帮手。


在这里插入图片描述


http://www.ppmy.cn/ops/130422.html

相关文章

Spring Boot JPA中的Page组件详解

1. 简介 在开发企业级应用时&#xff0c;分页查询是一个非常常见的需求。Spring Boot JPA提供了强大的分页功能&#xff0c;通过Page接口和Pageable接口&#xff0c;我们可以轻松实现灵活的分页查询。本文将详细介绍Page组件的使用方法及其核心特性。 2. 核心概念 2.1 Page接…

《化学试剂》

《化学试剂》主要报道化学试剂、精细化学品、专用化学品及相关领域的最新研究进展、理论知识、科研成果、技术经验、新产品的合成、分离、提纯以及各种分析测试技术、分析仪器、行业动态等&#xff0c;及时反映国内外的发展水平。 《化学试剂》投稿指南 目前《化学试剂》期刊已…

sklearn机器学习实战

1.PCA降维 不是每个数据特征对分析的问题都有用。即使有用&#xff0c;对问题的重要程度也不一样。而我们需要过滤和筛选一些特征&#xff0c;去除冗余。 数据降维是指采取某种映射方法&#xff0c;把高维空间中可能包含冗余信息和噪声的数据点映射到低维空间&#xff0c;在低…

Javaweb 实验4 xml

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验四 XML 目的&#xff1a; 安装和使用XML的开发环境认识XML的不同类型掌握XML文档的基本语法了解D…

【生物学&水族馆】观赏淡水鱼检测系统源码&数据集全套:改进yolo11-dysample

改进yolo11-SEAMHead等200全套创新点大全&#xff1a;观赏淡水鱼检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

Vue--单文件组件

前置学习&#xff1a;模块化 单文件组件&#xff1a;整个文件就是一个组件(.vue)&#xff0c;将组件导出 整体项目结构 school.vue <template><div>{{name}}</div> </template><script> export default {name:"school",data(){retu…

Llama 3.2 Vision Molmo:多模态开源生态系统基础

编者按&#xff1a; 视觉功能的融入对模型能力和推理方式的影响如何&#xff1f;当我们需要一个既能看懂图像、又能生成文本的 AI 助手时&#xff0c;是否只能依赖于 GPT-4V 这样的闭源解决方案&#xff1f; 我们今天为大家分享的这篇文章&#xff0c;作者的核心观点是&#xf…

yarn : 无法加载文件,未对文件 进行数字签名。无法在当前系统上运行该脚本。

执行这个命令时报错&#xff1a;yarn --registryhttps://registry.npm.taobao.org yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1。未对文件 C:\Users\Administ rator\AppData\Roaming\npm\yarn.ps1 进行数字签名。无法在当前系统上运行该脚本。有…