c++中pair的使用方式以及一些常见的操作

c++中pair的使用方式以及一些常见的操作

说明

在C++中,std::pair 是一个标准库模板,用于将两个值作为一个单元进行存储。可以使用std::pair来将两个值组合成一个有序对。

头文件

cpp 复制代码
#include <utility>

创建 std::pair 对象

可以使用多种方式创建 std::pair 对象:

  1. 直接初始化 :通过提供两个值来直接初始化 std::pair 对象。

    cpp 复制代码
    std::pair<int, std::string> myPair(42, "hello");
  2. 使用 make_pair 函数 :这是一种方便的方法,它接受两个参数并返回一个初始化好的 std::pair 对象。

    cpp 复制代码
    auto anotherPair = std::make_pair(10, "world");

访问 std::pair 对象的元素

std::pair 对象的第一个元素可以通过 first 成员变量访问,第二个元素可以通过 second 成员变量访问。

cpp 复制代码
std::cout << "First element of myPair: " << myPair.first << std::endl;
std::cout << "Second element of myPair: " << myPair.second << std::endl;

修改 std::pair 对象的元素

可以直接修改 std::pair 对象的元素:

cpp 复制代码
myPair.first = 100;
myPair.second = "goodbye";

返回 std::pair 对象的函数

有时候函数需要返回多个值,此时可以使用 std::pair

cpp 复制代码
std::pair<int, std::string> getValues() {
    return std::make_pair(42, "hello");
}

auto values = getValues();
std::cout << "Returned pair: (" << values.first << ", " << values.second << ")" << std::endl;

使用 std::pair 在算法中

std::pair 在很多算法中都很有用,例如在排序算法中,可能想要保持每个元素与其索引的关联,可以使用 std::pair 来存储元素和索引。

cpp 复制代码
#include <vector>
#include <algorithm>
#include <iostream>
#include <utility>

int main() {
    std::vector<int> vec = {5, 2, 9, 1, 7};

    // 使用 std::pair 存储元素和索引
    std::vector<std::pair<int, int>> indexedVec;
    for (int i = 0; i < vec.size(); ++i) {
        indexedVec.push_back(std::make_pair(vec[i], i));
    }

    // 根据第一个元素(值)对 indexedVec 进行排序
    std::sort(indexedVec.begin(), indexedVec.end());

    // 输出排序后的结果
    for (const auto& p : indexedVec) {
        std::cout << "Value: " << p.first << ", Index: " << p.second << std::endl;
    }

    return 0;
}

这样,indexedVec 中的元素就被排序了,但是索引信息仍然与值关联着。

相关推荐
程序员AlbertTu5 小时前
M01 | 浮点数与误差:数值计算的世界观
c++·数值运算
沫璃染墨5 小时前
《从零入门Linux系统篇(二十八):文件篇·一——Linux为什么“万物皆文件”:从C语言文件流到系统调用》
linux·运维·服务器·开发语言·c++·文件
j7~6 小时前
【C++】《C++STL 笔记:搞懂序列 / 关联容器,聊聊 set 和 map》
c++·set·map·multimap·multiset·键值对pair·序列是容器和关联式容器
Feynman’s boom6 小时前
PDF解析复盘
数据库·人工智能·算法·pdf解析
luteres7 小时前
Mybatis+SSM整合笔记
java·开发语言·mybatis
郝学胜-神的一滴7 小时前
《C++11 工程级应用01:告别冗长类型,开启简洁高效编码新时代》深度解读
开发语言·c++·算法·软件开发·系统设计
其实防守也摸鱼7 小时前
推荐一个自动化教育SRC漏洞挖掘系统--AutoHunter
运维·开发语言·人工智能·学习·安全·web安全·自动化
学习中.........8 小时前
Transformer 训练资源估算:以 CS336 GPT-2 XL 配置为例
人工智能·python·算法·机器学习·自然语言处理
覆东流13 小时前
7.Java数组
java·开发语言·后端
Navigator_Z14 小时前
LeetCode //C - 1206. Design Skiplist
c语言·算法·leetcode