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 中的元素就被排序了,但是索引信息仍然与值关联着。

相关推荐
不想写代码的星星2 小时前
虚函数表:C++ 多态背后的那个男人
c++
Gorway3 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风3 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect3 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea17 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
端平入洛2 天前
delete又未完全delete
c++
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉