unordered_set
和 set
是 C++ STL 中的两种不同类型的容器,它们都用于存储唯一元素,但内部实现和特性有所不同:
unordered_set
vs set
-
内部实现:
set
基于平衡二叉树(通常是红黑树)实现,因此它的元素总是有序的。unordered_set
基于哈希表实现,因此它的元素是无序的。
-
性能:
- 对于
set
,查找、插入和删除操作的时间复杂度通常是 O(log n)。 - 对于
unordered_set
,这些操作的平均时间复杂度是 O(1),但最坏情况下可以退化到 O(n),尤其是当哈希冲突较多时。
- 对于
-
元素顺序:
set
中的元素会根据元素的值自动排序。unordered_set
中的元素没有特定的顺序。
insert
vs push_back
-
insert
:insert
方法用于将元素添加到容器中,如set
,unordered_set
,map
,unordered_map
等。- 对于
vector
和deque
,insert
可以在指定的迭代器位置插入元素或元素序列。 insert
不会改变容器中现有元素的顺序(对于有序容器如set
,元素会插入到保持顺序的正确位置)。
-
push_back
:push_back
专门用于顺序容器如vector
,deque
,list
等,用于在容器的末尾添加一个元素。push_back
只接受一个元素作为参数,并将其添加到容器的尾部。
简而言之,unordered_set
和 set
在性能和元素排序方面有显著差异,而 insert
和 push_back
则用于不同类型的容器,具有不同的用途和行为。