unordered_set 是 C++ 中的标准库容器,它是一个存储唯一元素的集合,其中每个元素的位置不由元素的值决定。unordered_set 基于哈希表实现,因此它能够提供平均常数时间复杂度的插入、删除和查找操作。接下来,我将从基本用法、特点和注意事项、以及示例代码三个方面来讲解 unordered_set

基本用法

  • 头文件:使用 unordered_set 前,需要包含头文件 <unordered_set>
  • 声明:可以通过 std::unordered_set<T> 声明一个集合,其中 T 是存储元素的类型。
  • 操作
    • .insert(value):向集合中插入元素 value
    • .erase(value):从集合中移除元素 value
    • .find(value):查找元素 value,如果找到则返回一个指向该元素的迭代器,否则返回 end()
    • .size():返回集合中元素的数量。
    • .clear():清空集合中的所有元素。

特点和注意事项

  • 唯一性unordered_set 中的每个元素都必须是唯一的,即不允许重复的元素。
  • 无序性:元素在 unordered_set 中的存储是无序的,不保证任何特定的元素顺序。
  • 性能考虑:虽然 unordered_set 提供了平均常数时间复杂度的操作性能,但是哈希冲突和重哈希操作可能会导致性能下降。
  • 自定义类型:如果要在 unordered_set 中存储自定义类型的对象,需要定义相应的哈希函数和相等判断函数。

示例代码

下面的示例展示了如何使用 unordered_set 来存储和操作一组整数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <unordered_set>

int main() {
std::unordered_set<int> mySet;

// 插入元素
mySet.insert(1);
mySet.insert(2);
mySet.insert(3);
mySet.insert(4);
mySet.insert(1); // 重复插入,不会增加新元素

std::cout << "The set contains: ";
for (int num : mySet) {
std::cout << num << " ";
}
std::cout << std::endl;

// 查找元素
if (mySet.find(2) != mySet.end()) {
std::cout << "Element found" << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}

// 删除元素
mySet.erase(2);
std::cout << "Element 2 removed" << std::endl;

// 显示集合大小
std::cout << "The set size is: " << mySet.size() << std::endl;

return 0;
}

这段代码首先创建了一个 unordered_set 的实例 mySet 并插入了几个整数。注意到尝试插入重复的元素(如数字 1)不会增加新元素。接着,代码演示了如何查找、删除元素和获取集合的大小。


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。