set

时间:2021-07-26
本文章向大家介绍set,主要包括set使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

用处

\(set\)更多的用在可以用平衡树做的题目中,换句话说,平衡树的题用\(set\)一般都可以做。\(set\)支持查找一序列的长度、是否为空,可以随时插入、删除元素,可以查找某个点的前驱后继等。

用法

调用

\(set\)作为\(STL\),要用到专门的头文件。

#include<set>

\(set\)的调用与\(queue\)等类似:\(set<\)类型\(>\) 名称,如:

set<int> a;

注意,\(set\)中的元素不可重复,若有重复,应用\(multiset\)

常用操作(以名称为\(a\)\(set\)为例)

  1. 插入:\(a.insert(x)\),向\(a\)中插入一个元素\(x\)
  2. 删除:\(a.erase(x)\),把\(a\)所有值为\(x\)的元素全部删除。
  3. 查找:\(a.find(x)\),查找\(a\)中第一个值为\(x\)的元素的地址
  4. 是否为空:\(a.empty()\),判断是否为空,用法与\(queue\)一样。
  5. 大小:\(a.size()\),返回\(a\)的大小,即元素个数。
  6. 前驱:\(a.upper_bound(x)\),返回第一个大于\(x\)的元素的地址
  7. 后继:\(a.lower_bound(x)\),不是真正意义上的后继,是返回第一个大于等于\(x\)的元素的地址,要想求后继要将地址\(--\)
  8. 第一个值:\(a.rbegin()\),返回\(a\)中的第一个值,即最大值。
  9. 末一个值:\(a.end()\),返回\(a\)中的最后一个值,即最小值。

例题:CF528A Glass Carving

题意

原文地址:https://www.cnblogs.com/qzhwlzy/p/15060990.html