STL Pair 模板的自定义排序方法

C++C++Beginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将学习如何为 pair 模板创建自定义排序方法,并使用 C++ 编程语言中的 vector 来实现它。本实验假设你已经具备 C++ 编程基础知识和 pair 模板的概念。如果你对这些主题不熟悉,建议在继续之前先学习相应的教程。

创建一个空向量并填充元素

我们将从声明一个空的 pair 向量开始,然后填充一些元素。
在这一步中,我们将创建一个空向量。

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

在这个代码块中,我们只是包含了所需的头文件并声明了一个空的 pair 向量。

向向量中填充元素

在创建了一个空向量之后,我们可以向其中添加元素。我们将使用向量类的 push_back 方法来添加元素。在这个例子中,我们向向量中添加整数对。

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

在这个代码块中,我们向向量 v 中添加了 5 个整数对。

创建自定义排序方法

要创建自定义排序方法,我们首先需要定义一个比较函数。该比较函数会比较两个 pair 并返回一个布尔值,指示第一个 pair 是否小于第二个 pair。在这个例子中,我们将比较每个 pair 的第一个元素,如果它们相等,则比较 pair 的第二个元素。

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first != y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

在这个代码块中,我们创建了一个比较函数,它接受两个整数 pair 作为参数,并根据我们指定的条件返回一个布尔值。该函数首先比较每个 pair 的第一个元素。如果它们不相等,则返回比较结果。如果它们相等,则比较 pair 的第二个元素并返回比较结果。

使用 sort 对向量进行排序

在这一步中,我们将根据上一步创建的自定义排序方法对向量中的元素进行排序。要对向量进行排序,我们需要调用 STL 的 sort 方法,并将向量作为其参数,同时将自定义排序方法作为第三个参数传递。

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

在这个代码块中,我们使用 STL 的 sort 方法对向量 v 进行了排序,并将自定义排序方法 cmp 作为第三个参数传递。

打印排序后的向量

在这一步中,我们将打印排序后的向量元素。我们将使用 for 循环遍历向量,并打印每个 pair 的第一个和第二个元素。

int main() {
  // previous code

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

在这个最终的代码块中,我们使用了一个 for-each 循环来访问向量中的 pair 并将它们打印到控制台。现在,让我们运行代码以查看结果。

运行代码

要运行代码,你需要使用以下命令进行编译:

g++ ~/project/main.cpp -o main && ./main

运行代码后,你将看到按升序排列的 pair 被打印出来。

完整代码示例

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first != y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

总结

在本实验中,我们学习了如何为 pair 模板创建自定义排序方法,并使用 C++ 中的 vector 实现它。我们创建了一个空向量,向其中添加元素,定义了一个比较函数,使用 sort 函数结合自定义排序方法对向量中的元素进行排序,并打印了排序后的向量。自定义排序方法可以根据我们在代码中定义的特定需求或条件对向量中的 pair 进行排序。