在 C++ 中初始化 unordered_set 的不同方法

2025 年 3 月 24 日 | 4 分钟阅读

引言

在 C++ 中,std::unordered_set 是一个灵活的容器,它提供了一种基于哈希的方法来存储不重复的项。与保持元素有序的 std::set 不同,Std::unordered_set 无法对其包含的组件施加任何顺序。相反,它利用哈希表数据结构,使得查找、插入和删除等常见操作的平均时间复杂度达到常数时间。当快速访问单个元素至关重要而顺序无关紧要时,这使其成为管理一组组件的有利选择。

Different Ways to Initialize an unordered_set in C++

std::unordered_set 能够容纳唯一元素是其主要特性之一。插入操作可确保每个元素在框架内的独特性,当您尝试引入一个集合中已存在的组件时,该操作不会产生任何效果。由于其特性,它适用于需要维护一组独特特征而不必担心重复的情况。

在您的 C++ 应用程序中,您必须包含头文件才能使用 std::unordered_set。一旦包含,您就可以使用其成员方法来定义和创建一个 std::unordered_set 类型的对象。支持的操作包括插入(insert())、删除(erase())和元素查找(find()),为用户处理集合数据提供了灵活性。

使用基于范围的 for 循环或迭代器来遍历 std::unordered_set 的项非常简单。它使您能够有效地处理集合中的每个元素,并执行任何必要的操作或计算。此外,遵循哈希表内部组织的迭代器使得遍历 std::unordered_set 的成员成为可能。

尽管 std::unordered_set 在大多数情况下提供了良好的性能,但在设计和实现使用 std::unordered_set 的应用程序时,您应考虑负载因子、哈希函数的质量和元素分布等因素。在设计和实现使用 std::unordered_set 的应用程序时应考虑几个方面,因为它们可能会影响操作的实际效率。总而言之,std::unordered_set 是 C++ 标准库中一个强大的工具,它为管理包含唯一项的集合提供了一种方便高效的基于哈希的方法。

在 C++ 中初始化 unordered_set 的不同方法

方法 1:使用花括号括起的初始化列表

在 C++ 中初始化无序集合最简单、最紧凑的方法之一是使用花括号括起的初始化列表。在声明集合时,此方法可让您直接在大括号 {} 中定义集合的初始组件。

示例

输出

1 2 4 5 6

说明

在此示例中,使用花括号括起的初始化列表来定义和初始化一个名为 mySet 的 unordered_set,其条目为 {4, 1, 5, 2, 6}。由于无序集合是未排序的,集合中元素的出现顺序可能与信息提供的顺序不同。

方法 2:范围构造函数

初始化 unordered_set 的另一种方法是使用范围构造函数,它需要两个迭代器来指示要添加到待初始化集合中的元素范围。当您将项保存在另一个容器(如 vector 或 array)中时,此功能非常有用。

示例

输出

1 2 4 5 6

说明

在此示例中,使用范围构造函数初始化一个名为 mySetunordered_set,其条目来自 elements 向量。begin() 和 end() 迭代器可以确定要放入集合中的元素范围。

方法 3:逐个插入元素

作为替代方案,您可以使用 insert() 方法,通过一次插入一个元素来启动一个 unordered_set。尽管对于大型集合而言效率可能较低,但当您需要动态或有条件地添加组件时,上述方法提供了灵活性。

示例

输出

1 2 4 5 6

说明

在此示例中,定义了一个名为 mySet 的空 unordered_set,并使用 insert() 方法一次一个地将每个元素单独放入其中。每次调用 insert() 都会向集合中添加一个新元素。

这些技术提供了多种在 C++ 中初始化 unordered_set 的方法,以适应不同的用例以及对效率和可读性的偏好。选择最适合您特定用例的方法。