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

相关推荐
草莓熊Lotso9 分钟前
C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
前端·c++·python·selenium
JS.Huang14 分钟前
【JavaScript】原生函数
开发语言·javascript·ecmascript
茉莉玫瑰花茶30 分钟前
floodfill 算法(dfs)
算法·深度优先
CoderCodingNo1 小时前
【GESP】C++五级考试大纲知识点梳理, (5) 算法复杂度估算(多项式、对数)
开发语言·c++·算法
星河队长1 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
MYX_3092 小时前
第三章 线型神经网络
深度学习·神经网络·学习·算法
ftpeak2 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
一个很帅的帅哥2 小时前
JavaScript事件循环
开发语言·前端·javascript
驰羽2 小时前
[GO]gin框架:ShouldBindJSON与其他常见绑定方法
开发语言·golang·gin
程序员大雄学编程2 小时前
「用Python来学微积分」5. 曲线的极坐标方程
开发语言·python·微积分