1. set(顺序容器)
<set>
主要包括set
(元素不能重复)和multiset
(可以包含若干个相等的元素),分别叫做“有序集合”和“有序多重集合”
。set 和 multiset 的内部实现是一棵红黑树,它们支持的函数基本相同。
set<int> s;
struct rec{…}; set<rec> s; // 结构体rec中必须重载定义小于号
multiset<double> s;
Ps: 结构体rec中必须重载定义小于号
2. 遍历set 的方式
for(auto x : set)
3.count()
返回 是否存在 元素 是一个 bool 类型
4.迭代器
同 vector 一样 也存在迭代器的概念 简单理解为指针即可
5. size/empty/clear
同vector
6.end / begin
分别指向 set 首位元素的迭代器
7.find
s.find(x)在集合s中查找等于x的元素,并返回指向该元素的迭代器。若不存在,则返回s.end()。时间复杂度为 O(logn)O(logn)。
可以用来判断是否存在元素 x
如果存在的话,会返回迭代器,
如果不存在的话,会返回set.end()
所以可以通过判断 set.end() 与 set.find(x) 来确定是否存在元素x
8. insert
插入 时间复杂度O(log N)
9. lower_bound/upper_bound
同 vector BinarySearch 函数
10. count
set.count(x)返回集合s中等于x的元素个数,时间复杂度为 O(k+logn)O(k+logn),其中 kk 为元素x的个数