set(红黑树)(自动排序)
头文件:#include <set>
是一个集合容器,其中包含的元素是唯一的,通过红黑树的数据结构实现
集合中的元素按照一定的顺序排列,且不能指定插入位置
在插入和删除操作上比较快速
不可以直接存取元素,不可以使用类似at.(pos)与[]操作符
不可直接修改容器中的元素值,如果要修改需要删除原有元素而后再插入新的元素
采用类模板实现,其默认构造函数: set<T> s;
可进行元素排列: set<int , less<int>> seta; //该容器按照升序方式排列
set<int ,greater<int>> setb; //该容器按照降序方式排列
//因为其自带升序排列,故set<int> == set<int ,less<int>>
函数部分:
```cpp
set.insert();//在容器中插入元素
set.begin();//返回容器中第一个数据的迭代器
set.end();//返回容器中最后一个数据的后面的迭代器
set.rbegin();//返回容器中倒数第一个元素的迭代器
set.rend();//返回容器中倒数最后一个元素的后面的迭代器
set(const set &st);//拷贝构造函数
set &operator=(const set &st);//重载等号操作符
set.swap(st);//交换两个集合容器
set.size();//返回容器中元素的数目
set.empty();//判断容器是否为空
set.clear();//清空所有元素
set.erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器
set.erase(beg,end);//删除[beg,end)区间的所有元素,返回下一个元素的迭代器,且注意为左闭右开区间
set.erase(elem);//删除容器中为elem的元素
重点
set.find(elem);//查找elem元素,返回指向elem元素的迭代器
set.count(elem);//返回容器中值为elem的元素的个数,对set来说,1或0,因为set不允许重复
set.lower_bound(elem);//返回第一个>=elem元素的迭代器
set.upper_bound(elem);//返回第一个>elem元素的迭代器
set.equal_range(elem);//返回容器中与elem相等的上下限的两个迭代器,上限是闭区间,下限为开区间[beg,end)
multiset和unordered_set的用法与set类似
区别在于:
multiset可以有重复的值
unordered_set的内部结构为哈希表,需要用哈希函数(散列函数)进行求值插入
且内部排列紊乱,是无序的,不过查找快