stl中的一点常规用法
一、set
很多童鞋喜欢用set,它不但能给数据排序,还能去重复,即一个数据只能出现一次(多次保存只会留一份)。内部的原理是红黑树。
红黑树是一种自平衡二叉查找树, 它可以在O(log n)时间内做查找,插入和删除。
同其他需要排序的数据类型一样,为一个结构体的set,需要重载小于号。如果set<>中放的是int,char,float,double,short等简单数据类型,不需要重载<操作符。
struct node { int i; int j; }; set<node> s; bool operator <(const node &a, const node &b) { if (a.i > b.i) return false; else if (a.j > b.j) return false; return ture; };
常规几个函数:
1.insert()
insert(x)可以将x插入set容器中,并且会自动排序(递增顺序)和去重;在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效。
返回插入地址的迭代器和是否插入成功的bool并成的pair,时间复杂度为O(log n)
2.find()
find(value)返回set中对应值为value的迭代器:
若不存在,返回set.end(),时间复杂度为O(log n)
3.erase()
删除单个元素或者删除一个区间内的所有元素:
参数可以是元素或者迭代器,返回下一个元素的迭代器,时间复杂度为O(log n)
4.size()
返回set内元素的个数,一个整形变量,表示set中元素个数,时间复杂度O(1)
5.clear()
清空set中所有的元素,无返回值
6.empty()
检查set是否为空,返回一个bool型变量,1表示set为空,否则为非空,时间复杂度O(1)
7. lower_bound(x)/upper_bound(x)
lower_bound(x)表示查找>=x的元素中最小的一个,并返回指向该元素的迭代器
upper_bound(x)表示查找>x的元素中最小的一个,并返回指向该元素的迭代器