\(set\)更多的用在可以用平衡树做的题目中,换句话说,平衡树的题用\(set\)一般都可以做。\(set\)支持查找一序列的长度、是否为空,可以随时插入、删除元素,可以查找某个点的前驱后继等。
\(set\)作为\(STL\),要用到专门的头文件。
\(set\)的调用与\(queue\)等类似:\(set<\)类型\(>\) 名称,如:
注意,\(set\)中的元素不可重复,若有重复,应用\(multiset\)。
插入:\(a.insert(x)\),向\(a\)中插入一个元素\(x\)。
删除:\(a.erase(x)\),把\(a\)中所有值为\(x\)的元素全部删除。
查找:\(a.find(x)\),查找\(a\)中第一个值为\(x\)的元素的地址。
是否为空:\(a.empty()\),判断是否为空,用法与\(queue\)一样。
大小:\(a.size()\),返回\(a\)的大小,即元素个数。
前驱:\(a.upper\)_\(bound(x)\),返回第一个大于\(x\)的元素的地址。
后继:\(a.lower\)_\(bound(x)\),不是真正意义上的后继,是返回第一个大于等于\(x\)的元素的地址,要想求后继要将地址\(-1\)。
第一个值:\(a.rbegin()\),返回\(a\)中的第一个值,即最大值。
末一个值:\(a.end()\),返回\(a\)中的最后一个值,即最小值。