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

相关推荐
Hello.Reader22 分钟前
RediSearch 查询语法速览
前端·算法
generallizhong28 分钟前
android 省市区联动选择
android·java·算法
qq_3660862229 分钟前
mybatis-plus一对多关联查询
java·开发语言·mybatis
aashuii2 小时前
go客户端ssh交换机
开发语言·golang·ssh
是紫焅呢2 小时前
E结构体基础.go
开发语言·后端·golang·学习方法·visual studio code
YGGP2 小时前
LeetCode 662. 二叉树的最大宽度
算法
clt1233212 小时前
golang excel导出时需要显示刷新
开发语言·后端·golang
mxpan2 小时前
Golang 与 C/C++ 交互实践
c语言·c++·golang
Silverdew*2 小时前
vs code配置go开发环境以及问题解决 could not import cannot find package in GOROOT or GOPATH
开发语言·后端·golang
才鲸嵌入式3 小时前
C++相比于C语言增加了哪些概念?
c语言·c++·单片机·嵌入式·arm·面向对象·软件