介绍
在本实验中,你将学习如何为 pair
模板创建自定义排序方法,并使用 C++ 编程语言中的 vector
来实现它。本实验假设你已经具备 C++ 编程基础知识和 pair
模板的概念。如果你对这些主题不熟悉,建议在继续之前先学习相应的教程。
在本实验中,你将学习如何为 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
的第二个元素并返回比较结果。
在这一步中,我们将根据上一步创建的自定义排序方法对向量中的元素进行排序。要对向量进行排序,我们需要调用 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
进行排序。