集合set:
- 有序存储元素,默认从小到大。
- 不会有重复元素,相同元素存入集合set后也只有一个。
- 内部利用了红黑树,检索、插入、删除等操作效率高。
#include<set>
using namespace std;
set<data_type> s;
插入
s.insert (key_value)
将key_value插入到set中,返回值是pair<set::iterator,bool>,bool标志着插入是否成功,而iterator代表插入的位置,若key_value已经在set中,则iterator表示的key_value在set中的位置
s.insert (first,second)
将迭代器first到second之间的元素插入到set中,返回值是void
删除
s.erase (iterator)
删除迭代器iterator指向的值
s.erase (first,second)
删除迭代器first和second之间的值
s.erase (key_value)
删除键值key_value的值
s.clear ()
将集合清空
查找
s.find (key_value)
返回key_value所在位置的迭代器,没找到会返回s.end()
s.lower_bound (key_value)
返回第一个大于等于key_value的定位器
s.upper_bound (key_value)
返回最后一个大于等于key_value的定位器
s.count (key_value)
用来查找集合中某个键值出现的次数,但在集合中非0即1;
所以该函数可以判断key_value是否存在于该集合中
遍历
s.begin ()
返回一个迭代器,指向集合中第一个元素
s.end ()
返回一个迭代器,指向集合中最后一个元素
正常遍历:
set<data_type>::iterator iter; //迭代器
for(iter=s.begin();iter!=s.end();iter++)
{
...
}
注:①不能使用 iter<s.end()
② iter在这里类似于指针,可以用 * iter取值
s.rbegin ()
返回一个逆序迭代器,指向集合的最后一个元素
s.rend ()
返回一个逆序迭代器,指向集合的第一个元素
反向遍历:
set<data_type>::reverse_iterator r_iter; //反向迭代器
for(r_iter=s.rbegin();r_iter!=s.rend();r_iter++)
{
...
}
其他常用函数
s.empty ()
判断集合是否为空,集合为空返回true,否则返回false
s.size ()
返回当前集合中的元素个数
s.max_size ()
返回set容器可能包含的元素最大个数
此外,因为set中元素是默认从小到大排序的,若要令其从大到小排序需如下定义
set<data_type , greater<data_type>> s;
set<data_type , greater<data_type>>::iterator iter; //对应的迭代器
若要自定义排序方式,需另外重载运算符
参考自:
https://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html
https://blog.csdn.net/kjing/article/details/6936325