C++ pair类型详细介绍

pair类型

pair 类型是 C++ 标准库中的一个模板类,它可以将两个不同类型的数据元素组合成一个单元。这个数据结构用于存储两个关联的数据元素,通常称为键值对(key-value pair)。

pair 类型在 头文件中定义,因此在使用时需要包含这个头文件。

使用 pair 类型的基本语法如下:

pair p;

其中,Type1 和 Type2 分别表示键和值的数据类型。例如,如果你想将一个整数和一个字符串组合在一起,可以这样定义一个 pair:

pair p;

创建(初始化)一个pair对象的几种方法

pair p = std::make_pair(1, "one");//使用make_pair函数创建

pair p(1,"one");

pair p = {1,"one"}

这三种初始化pair的方式所达到的效果都是一样的,

无论哪种方式,最终结果都是创建了一个拥有两个值的pair对象,

一个是int类型的值,一个是string类型的值。第一个值为1,第二个值为"one"。

pair 类型有两个公共成员变量:first 和 second,分别表示键和值。可以通过这两个成员变量访问存储在 pair 对象中的数据:

int key = p.first;

string value = p.second;

pair的作用场景

pair 类型常用于关联容器(如 std::map 和 std::unordered_map)以及其它一些需要将两个数据元素关联起来的场景。例如,在排序算法中,你可能需要将数组的索引与其对应的值关联起来以便在排序过程中维护索引的正确顺序。

关于 pair 类型的应用和操作,我将给出一些实际示例。

使用 pair 类型在一个向量中存储多个键值对:

#include

#include

#include

int main() {

std::vector> data = {

{1, "one"},

{2, "two"},

{3, "three"},

{4, "four"},

{5, "five"}

};

for (const auto& p : data) {

std::cout << p.first << " => " << p.second << std::endl;

}

return 0;

}

使用 pair 类型在排序算法中维护索引:

#include

#include

#include

#include

bool compare(const std::pair& a, const std::pair& b) {

return a.second < b.second;

}

int main() {

std::vector data = {5, 3, 7, 1, 2};

std::vector> indexed_data;

for (size_t i = 0; i < data.size(); ++i) {

indexed_data.push_back(std::make_pair(i, data[i]));

}

std::sort(indexed_data.begin(), indexed_data.end(), compare);

std::cout << "Sorted data: ";

for (const auto& p : indexed_data) {

std::cout << p.second << " ";

}

std::cout << std::endl;

std::cout << "Original indices: ";

for (const auto& p : indexed_data) {

std::cout << p.first << " ";

}

std::cout << std::endl;

return 0;

}

在关联容器(如 std::map)中使用 pair 类型:

#include

#include

#include

int main() {

std::map data = {

{1, "one"},

{2, "two"},

{3, "three"},

{4, "four"},

{5, "five"}

};

for (const auto& p : data) {

std::cout << p.first << " => " << p.second << std::endl;

}

return 0;

}

总结

这些示例展示了如何使用 pair 类型在不同场景中存储和操作键值对数据。请注意,pair 类型是一个通用的数据结构,可以用于各种需要将两个相关数据元素组合在一起的应用。