跳转至

pair和array

🧩 pair(对组)

pair 是一个 STL 中的容器,可以存储两个 不同类型 的值。

pair<int, string> a = {1, "hello"};

🔸 可以简单理解为系统自带的两个元素的结构体。 🔸 获取元素方式:

a.first      // 获取第一个值
a.second     // 获取第二个值

🔸 支持默认比较:先比较 first,若相同则比较 second,因此可直接用于排序。

✨ 示例:排序 pair 数组

pair<int, int> a[N];
for (int i = 1; i <= n; i++) 
{
    cin >> a[i].first >> a[i].second;
}

sort(a + 1, a + n + 1);              // 按 first 从小到大排序
sort(a + 1, a + n + 1, greater<>()); // 按 first 从大到小排序

🔁 pair 的嵌套

pair<int, pair<string, bool>> a = {1, {"hello", true}};
cout << a.first << "\n";
cout << a.second.first << " " << a.second.second;

📦 array(定长数组容器)

array 是 STL 中的 固定长度数组容器,所有元素类型必须一致。

array<int, 3> a = {1, 2, 3};

🔸 相当于长度为 3int 数组 🔸 访问方式:a[0], a[1], a[2] 🔸 支持默认比较:从第 0 位开始依次比较

✨ 示例:排序 array 数组

array<int, 3> a[N];
for (int i = 1; i <= n; i++) 
{
    cin >> a[i][0] >> a[i][1] >> a[i][2];
}

sort(a + 1, a + n + 1);              // 默认升序排序
sort(a + 1, a + n + 1, greater<>()); // 默认降序排序

📚 tuple(元组)

tuple 是 STL 中的多元素容器,支持存储多个 不同类型 的数据。

tuple<int, string, double> t = {1, "abc", 3.14};

🔸 类似 pair,但可存储两个以上的值 🔸 元素访问使用 get<下标>(t),下标从 0 开始:

cout << get<0>(t) << get<1>(t) << get<2>(t);

🔸 支持默认比较与排序(逐元素从前往后比较)

✨ 示例:排序 tuple 数组

tuple<int, int, int> a[N];
for (int i = 1; i <= n; i++) 
{
    int x, y, z;
    cin >> x >> y >> z;
    a[i] = {x, y, z};
}

sort(a + 1, a + n + 1); // 默认升序排序

🧮 总结对比表

容器类型 元素数量 是否支持不同类型 支持排序 特点
pair 2 简洁高效的双元素容器
array 固定长度 所有元素类型一致,支持随机访问
tuple 任意个数 更通用的多元素组合,结构更复杂

✅ 推荐使用选择:

  • 若需要存储多个不同类型的数据,且数量超过 2 ➤ 使用 tuple
  • 若只有两个值需组合 ➤ 使用 pair 简洁高效
  • 若固定长度且元素类型一致 ➤ 选择 array 更实用