C++ 使用 STL 无序集合

C++Beginner
立即练习

介绍

在本实验中,你将学习如何在 C++ 中实现和使用 std::unordered_set。集合(set)用于存储列表中的唯一值并自动对其进行排序。无序集合(unordered set)与集合类似,但它不会对元素进行排序,而是以随机顺序存储它们。它还会自动删除任何重复的元素。

设置项目目录

首先,创建一个项目文件夹来存放你的代码。打开终端并使用 cd 命令导航到该文件夹。

cd ~/project
touch main.cpp

使用你选择的任何文本编辑器创建一个名为 main.cpp 的新文件。

创建一个程序来演示无序集合的工作原理

在这一步中,编写一个程序来演示 C++ 中 std::unordered_set 的工作原理。该程序将声明一个空的 std::unordered_set,填充一些元素,删除一个元素,然后打印集合中的元素。

首先包含必要的库,并创建一个 show 函数,使用迭代器打印无序集合中的元素。

#include <iostream>
#include <unordered_set>

void show(std::unordered_set<int> s)
{
    std::unordered_set<int>::iterator it;

    for (it = s.begin(); it != s.end(); ++it)
    {
        std::cout << *it << " ";
    }
}

向无序集合中填充整数

在这一步中,使用 insert 方法向 std::unordered_set 中填充六个整数。

int main()
{
    std::unordered_set<int> s;
    s.insert(5);
    s.insert(39);
    s.insert(64);
    s.insert(82);
    s.insert(35);
    s.insert(54);

    std::cout << "The elements of the unordered set are: \n";
    show(s);

    return 0;
}

从无序集合中删除元素

在这一步中,使用 erase 方法从无序集合中删除一个元素,然后打印更新后的集合。

int main()
{
    std::unordered_set<int> s;
    s.insert(5);
    s.insert(39);
    s.insert(64);
    s.insert(82);
    s.insert(35);
    s.insert(54);

    std::cout << "The elements of the unordered set are: \n";
    show(s);

    s.erase(39);
    std::cout << "\nAfter deleting the element 39 from the unordered set using the erase() method, it becomes: \n";
    show(s);

    return 0;
}

编译并运行代码

要编译并运行代码,请在终端中使用以下命令:

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

输出结果将是:

The elements of the unordered set are:
54 35 5 64 39 82
After deleting the element 39 from the unordered set using the erase() method, it becomes:
54 35 5 64 82

完整的 main.cpp 代码

以下是 main.cpp 的完整代码:

#include <iostream>
#include <unordered_set>

void show(std::unordered_set<int> s)
{
    std::unordered_set<int>::iterator it;

    for (it = s.begin(); it != s.end(); ++it)
    {
        std::cout << *it << " ";
    }
}

int main()
{
    std::unordered_set<int> s;
    s.insert(5);
    s.insert(39);
    s.insert(64);
    s.insert(82);
    s.insert(35);
    s.insert(54);

    std::cout << "The elements of the unordered set are: \n";
    show(s);

    s.erase(39);
    std::cout << "\nAfter deleting the element 39 from the unordered set using the erase() method, it becomes: \n";
    show(s);

    return 0;
}

总结

在本实验中,你学习了如何在 C++ 中实现和使用 std::unordered_setstd::unordered_set 用于存储唯一值,并自动删除任何重复项。与 std::set 不同,它不会对元素进行排序,而是以随机顺序存储它们。