在C++标准模板库(STL)中,set
是基于关联容器的一个抽象数据类型,用于存储不重复的元素。与 map
类似,set
的底层实现也通常采用红黑树(一种自平衡的二叉搜索树)。这使得 set
中的大多数操作(例如插入、删除和搜索)都能以对数时间复杂度 O(log n) 来执行,其中 n 是集合中元素的数量。
使用红黑树作为底层数据结构,set
可以保证元素会按照特定的顺序排序,通常是按照键值的递增顺序。红黑树确保了任何时候树都是相对平衡的,所以 set
容器在处理大量动态插入和删除操作时依然能够提供良好的性能。
除了 set
,STL 还提供了 unordered_set
容器,其底层实现是基于哈希表。unordered_set
不保证元素的有序性,但在理想情况下可以提供更快的平均时间复杂度 O(1) 的访问性能。不过,在最坏的情况下(例如,当哈希函数导致很多碰撞时),它的性能可能会退化到 O(n)。