前言:
std::set
是C++标准模板库(STL)中的一个关联容器,它存储唯一元素,并自动按升序排列。std::set
通常用于需要快速查找、插入和删除元素的场景,同时保证元素的唯一性和有序性。
一、set
1、简介
std::set
容器是一个包含唯一对象的集合,它自动维护元素的排序(默认递增)。具备下面的特点:
- 元素无法直接修改,且不能重复。
- 提供了高效的查找、插入和删除操作,时间复杂度通常为
O(logn)
。 std::set
容器底层通常使用红黑树实现。std::set
容器中,内存管理是由标准库自动处理的。插入元素时,容器会自动分配足够的内存来存储新插入的元素。删除元素时,容器会自动释放不再需要的内存。- 插入元素时,如果元素已存在,则插入操作不会执行,也不会分配新的内存。
std::set
容器提供双向迭代器,不支持随机访问。迭代器在删除元素后可能会失效,因此在迭代过程中删除元素需要特别小心。
2、迭代器
#include <iostream>
#include <set>
int main() {
// 创建一个空的整数集合
std::set<int> my_set;
// 向集合中插入元素
my_set.insert(3);
my_set.insert(1);
my_set.insert(4);
my_set.insert(2);
// 遍历并打印集合中的元素
for (const int& num : my_set) {
std::cout << num << " ";
}
return 0;
}
3、常用操作
insert(const T& value)
: 插入一个元素(如果元素已存在,则不会插入)。clear()
: 移除 set 中的所有元素。erase(iterator pos)
:移除位于 pos 位置的元素。erase(const T& value)
:移除值为 value 的元素(如果存在)。swap(std::set<T>& other)
:交换两个 set 的内容。size()
:返回 set 中元素的数量。empty()
:检查 set 是否为空。find(const T& value)
:查找值为 value 的元素,并返回指向它的迭代器(如果未找到,则返回 end())。count(const T& value)
:返回值为 value 的元素的数量(对于 set,返回值要么是 0,要么是 1)。