📜  unordered_set 为向量 - C++ (1)

📅  最后修改于: 2023-12-03 15:35:31.665000             🧑  作者: Mango

Unordered_set 为向量 - C++

简介

unordered_set 是 C++ STL 标准库中的一种容器,它可以存储一组独特的元素(不重复),并对它们提供高效的查询功能。中文翻译为“无序集合”。

在内部,unordered_set 使用哈希表实现,它使用哈希函数将元素映射到一个存储桶中,其中每个存储桶存储一个或多个元素。如果桶中的元素数量增加,则哈希表将重新进行调整。

因此,unordered_set 在插入和查找元素方面非常高效,时间复杂度为 O(1)。但是,与此同时,由于哈希函数本身具有随机性,因此 unordered_set 中元素的存储顺序是不确定的。

特点
  1. 不重复:任意两个元素的值不相同。
  2. 高效:插入、删除、查找操作均为 O(1)。
  3. 无序:元素的存储顺序是不确定的。
使用方法

使用 unordered_set 首先需要包含头文件 #include<unordered_set>,然后通过以下方式定义一个 unordered_set

unordered_set<int> mySet;

定义一个 unordered_set 后,可以使用 insert() 函数插入元素,使用 erase() 函数删除元素,使用 find() 函数查找元素。

mySet.insert(10);
mySet.insert(20);
mySet.erase(10);
auto it = mySet.find(20);

在以上示例中,auto 根据赋值语句自动推导出 it 的类型为 unordered_set<int>::iterator。使用 *it 可以获取迭代器指向的元素。

遍历操作

可以使用迭代器遍历 unordered_set 中的元素,例如:

unordered_set<int> mySet = {5, 10, 20};
for(auto it = mySet.begin(); it != mySet.end(); it++){
    cout << *it << " ";
}
// Output: 20 5 10 (无序)

也可以使用 for 循环遍历 unordered_set 中的元素,例如:

unordered_set<int> mySet = {5, 10, 20};
for(int x: mySet){
    cout << x << " ";
}
// Output: 20 5 10 (无序)
总结

unordered_set 是一个非常有用的容器。它可以高效地存储一组独特的元素,并提供高效的查询功能。但是,由于它的元素存储顺序是无序的,所以在一些场景中可能不适用。