介绍
在本实验中,你将学习如何在 C++ 编程语言中对无序集合(unordered set)进行排序。你将了解无序集合的基本概念及其实现。
在本实验中,你将学习如何在 C++ 编程语言中对无序集合(unordered set)进行排序。你将了解无序集合的基本概念及其实现。
首先,打开终端并输入以下命令以导航到 project
目录:
cd project
现在,在 project
目录中创建一个名为 main.cpp
的新文件。该文件将包含用于对无序集合(unordered set)进行排序的代码。
touch main.cpp
将以下代码复制并粘贴到 main.cpp
文件中。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool cmp(int x, int y)
{
if (x > y)
return true;
else
return false;
}
// 使用迭代器打印无序集合(unordered set)元素的函数
void show(unordered_set<int> s)
{
// 声明一个迭代器来遍历无序集合
unordered_set<int>::iterator i;
for (i = s.begin(); i != s.end(); i++)
{
cout << *i << " "; // 使用 * 访问无序集合的元素,因为 i 存储了每个元素的地址
}
cout << endl;
}
int main()
{
cout << "\n\nWelcome to LabEx :-)\n\n\n";
cout << " ===== 演示在 C++ 中对无序集合进行排序的程序 ===== \n\n\n\n";
cout << " *** 无序集合会自动移除重复元素并保持随机顺序。 *** \n\n";
cout << " *** 这种随机顺序取决于内部使用的哈希函数。 *** \n\n";
cout << " *** 可以通过将无序集合的元素复制到向量(Vector)中来对其进行排序。 *** \n\n";
// 声明无序集合(整数类型的无序集合)
unordered_set<int> s;
// 使用 insert() 方法填充元素
cout << "\n\n以随机顺序填充无序集合。"; // 与 Set 不同,无序集合不会自动排序
s.insert(5);
s.insert(39);
s.insert(64);
s.insert(82);
s.insert(35);
s.insert(54);
cout << "\n\n排序前无序集合的元素为:";
show(s);
// 声明一个向量并用无序集合的元素初始化
vector<int> v(s.begin(), s.end());
// 使用自定义比较器对向量元素进行降序排序
sort(v.begin(), v.end(), cmp);
cout << "\n\n使用自定义排序方法对无序集合进行降序排序后的元素为:\n";
// 声明一个迭代器来遍历向量
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " "; // 使用 * 访问向量的元素,因为 it 存储了每个元素的地址
}
cout << "\n\n\n";
return 0;
}
要编译程序并创建可执行文件,请在终端中运行以下命令:
g++ main.cpp -o main
此命令将创建一个名为 main
的可执行文件。
要运行代码,请执行以下命令:
./main
你应该会在终端中看到程序的输出。
将最终代码复制到 ~/project/main.cpp
文件中:
// ~/project/main.cpp
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool cmp(int x, int y)
{
if (x > y)
return true;
else
return false;
}
// 使用迭代器打印无序集合(unordered set)元素的函数
void show(unordered_set<int> s)
{
// 声明一个迭代器来遍历无序集合
unordered_set<int>::iterator i;
for (i = s.begin(); i != s.end(); i++)
{
cout << *i << " "; // 使用 * 访问无序集合的元素,因为 i 存储了每个元素的地址
}
cout << endl;
}
int main()
{
cout << "\n\nWelcome to LabEx :-)\n\n\n";
cout << " ===== 演示在 C++ 中对无序集合进行排序的程序 ===== \n\n\n\n";
cout << " *** 无序集合会自动移除重复元素并保持随机顺序。 *** \n\n";
cout << " *** 这种随机顺序取决于内部使用的哈希函数。 *** \n\n";
cout << " *** 可以通过将无序集合的元素复制到向量(Vector)中来对其进行排序。 *** \n\n";
// 声明无序集合(整数类型的无序集合)
unordered_set<int> s;
// 使用 insert() 方法填充元素
cout << "\n\n以随机顺序填充无序集合。"; // 与 Set 不同,无序集合不会自动排序
s.insert(5);
s.insert(39);
s.insert(64);
s.insert(82);
s.insert(35);
s.insert(54);
cout << "\n\n排序前无序集合的元素为:";
show(s);
// 声明一个向量并用无序集合的元素初始化
vector<int> v(s.begin(), s.end());
// 使用自定义比较器对向量元素进行降序排序
sort(v.begin(), v.end(), cmp);
cout << "\n\n使用自定义排序方法对无序集合进行降序排序后的元素为:\n";
// 声明一个迭代器来遍历向量
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
cout << *it << " "; // 使用 * 访问向量的元素,因为 it 存储了每个元素的地址
}
cout << "\n\n\n";
return 0;
}
在本实验中,你学习了如何在 C++ 编程语言中对无序集合(unordered set)进行排序。你了解了无序集合的基本概念,以及如何使用向量(vector)和 STL 的 sort
方法来实现排序。你还学习了如何声明无序集合以及如何填充元素。