使用 STL 对无序集合进行排序

C++C++Beginner
立即练习

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

介绍

在本实验中,你将学习如何在 C++ 编程语言中对无序集合(unordered set)进行排序。你将了解无序集合的基本概念及其实现。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("`C++`")) -.-> cpp/BasicsGroup(["`Basics`"]) cpp(("`C++`")) -.-> cpp/FunctionsGroup(["`Functions`"]) cpp(("`C++`")) -.-> cpp/IOandFileHandlingGroup(["`I/O and File Handling`"]) cpp(("`C++`")) -.-> cpp/StandardLibraryGroup(["`Standard Library`"]) cpp(("`C++`")) -.-> cpp/SyntaxandStyleGroup(["`Syntax and Style`"]) cpp/BasicsGroup -.-> cpp/operators("`Operators`") cpp/FunctionsGroup -.-> cpp/function_parameters("`Function Parameters`") cpp/IOandFileHandlingGroup -.-> cpp/output("`Output`") cpp/IOandFileHandlingGroup -.-> cpp/user_input("`User Input`") cpp/IOandFileHandlingGroup -.-> cpp/files("`Files`") cpp/StandardLibraryGroup -.-> cpp/standard_containers("`Standard Containers`") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("`Code Formatting`") subgraph Lab Skills cpp/operators -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/function_parameters -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/output -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/user_input -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/files -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/standard_containers -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} cpp/code_formatting -.-> lab-96215{{"`使用 STL 对无序集合进行排序`"}} end

打开终端并设置工作目录

首先,打开终端并输入以下命令以导航到 project 目录:

cd project

创建 C++ 文件

现在,在 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 方法来实现排序。你还学习了如何声明无序集合以及如何填充元素。

您可能感兴趣的其他 C++ 教程