ACM练级日志:set

STL这个东西有时候会出乎意料的好用,第7篇那个让我写了200行的Treap用set这个玩意可以省掉很多代码……所以之后又用set重新写了一遍,正好以前也没用过set,记录一下,万一下次还有呢。


set需要开#include<set>,包含set和multiset;set是一个排好序的数据结构,不管你以什么顺序塞进去的,里面都是排好序的,比如你塞5,2,9,1进去,set里面就是1,2,5,9. set和multiset的区别就在于multiset允许重复,就是可以有1 2 2 2 3 5 这样的,set不可以有。


定义一个set的方法是 set<int> the_set,两个尖括号里面就是set内的数据类型。


set是一种STL中的“容器”,对于容器,需要一种叫迭代器的指针一样的东西,定义指针的方法是set<int> :: iterator p_set,就定义了一个迭代器p_set,它可以用来指set<int>。


当然那个迭代器的创建代码看着就让人烦,有些人是这么干的:开头先写上typedef set<int>::iterator  Set_PType, 这样以后只要Set_PType p_set就可以了,看起来就舒服多了。


set常用的函数:

the_set.insert(x)  插入x

the_set.find(x) 查找x(如果没有找到,返回的是the_set.end() )

the_set.erase(p_set) 删掉p_set这个位置上的元素

the_set.upper_bound(x) 查找第一个比x大的元素的位置

the_set.lower_bound(x) 查找第一个比x大或等于的元素位置


当然,也可以用自定义类型放进set里,可以用比较小的代价实现哈希的效果。比如HDU 4277,1w x1w x1w的需要记住的量用三维数组是存不下的,我就用了set<ttype>,其中ttype就是一个三元组,就可以搞定了。但是需要注意!! 这种自定义类型必须要重载小于号(否则编译会出错),而且一定要重载对,否则会出现你找结构体的时候找不到的情况。明明你s.insert(t)了,当你再想找t的时候却发现找不到,十有八九是重载小于号的部分写错了。这道题就是这里让我查了半天。


所以一些平衡树的题(还有需要用哈希的题)用set之类的做可以省很多事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值