set(红黑树)
set是一个去重、有序的集合
- set基于红黑树实现,插入、删除与查找等操作复杂度为对数级
- 红黑树,是一种平衡二叉搜索树
- 平衡,即意味着比较,因此set中的元素是有序的
- 平衡,意味着无法直接修改Node的值(元素始终是const的),但你可以先删除它,再插入新值,以达到修改的目的
- set内部存储的元素与map一样,也是一个键值对,只不过
key_type
与value_type
相等,因此我们只需传入一个元素类型T即可
模板参数¶
template <
class T, // set::key_type/value_type
class Compare = less<T>, // set::key_compare/value_compare
class Alloc = allocator<T> // set::allocator_type
>
class set;
T
即元素类型。set内部存储元素也是个键值对,只不过key_type与value_type相等,都是TCompare
即元素的比较函数,默认值为std::less<T>
Alloc
分配器,默认值为std::allocator<T>
成员函数¶
set::insert(x); //插入
iterator set::find(x); //查找元素值x,返回迭代器
size_t set::count(x); //计算元素值x的数量。因为set是去重数组,因此只会范围0或1
bool set::empty(); //true为空;false不为空