c++里面unorder_set和set的区别
时间: 2023-05-21 14:01:52 浏览: 93
unordered_set 是 C++11 引入的一个容器,它是一个无序的集合,底层实现是哈希表,可以快速地进行查找、插入和删除操作。而 set 是一个有序的集合,底层实现是红黑树,也可以进行查找、插入和删除操作,但是它会自动按照元素的大小进行排序。因此,unordered_set 更适合于需要快速查找元素的场景,而 set 更适合于需要有序遍历元素的场景。
相关问题
C++里的unorder_set
`unordered_set` 是 C++ STL 中的一个容器,它是基于哈希表实现的,可以用来存储一组无序的、不重复的元素。它的特点是查找、插入、删除的时间复杂度都是 O(1),因为它内部使用哈希表来实现数据存储和查找。在使用 `unordered_set` 时,我们需要提供一个哈希函数来对元素进行哈希,同时还需要提供一个相等比较函数来检查两个元素是否相等。下面是一个简单的示例代码:
```c++
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s = {3, 5, 7, 2, 1};
s.insert(6);
s.insert(3); // 重复插入,不会有影响
for (auto x : s) {
std::cout << x << " ";
}
std::cout << std::endl;
if (s.find(5) != s.end()) {
std::cout << "5 is in the set" << std::endl;
}
s.erase(2);
for (auto x : s) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
7 6 5 3 2 1
5 is in the set
7 6 5 3 1
```
可以看到,在 `unordered_set` 中,元素的顺序是无序的,每个元素只会出现一次,插入时如果元素已经存在,不会对集合产生影响,删除时可以直接使用元素的值进行删除。
unorder_set
unordered_set是C++ STL中的一个容器,它是一个无序的集合,其中的元素都是唯一的。与set相似,unordered_set也支持高效的查找、插入和删除操作,但是在内部实现上使用了哈希表来存储元素,因此元素是无序的。使用unordered_set可以提高查找效率,但是牺牲了元素顺序的保证。
下面是unordered_set的一些主要特点:
- 内部使用哈希表实现,插入、删除、查找的平均时间复杂度为O(1)。
- 无序,元素的顺序不受保证。
- 元素唯一,每个元素只能出现一次。
- 不支持下标操作,只能通过迭代器访问元素。
使用unordered_set需要包含头文件<unordered_set>,并且可以使用std::unordered_set来定义一个无序集合。