跳转至

set(红黑树)

set是一个去重、有序的集合

  1. set基于红黑树实现,插入、删除与查找等操作复杂度为对数级
  2. 红黑树,是一种平衡二叉搜索树
    1. 平衡,即意味着比较,因此set中的元素是有序的
    2. 平衡,意味着无法直接修改Node的值(元素始终是const的),但你可以先删除它,再插入新值,以达到修改的目的
  3. set内部存储的元素与map一样,也是一个键值对,只不过key_typevalue_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;
  1. T即元素类型。set内部存储元素也是个键值对,只不过key_type与value_type相等,都是T
  2. Compare即元素的比较函数,默认值为std::less<T>
  3. 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不为空

相关文档

  1. https://cplusplus.com/reference/set/set/