STL容器——集合set简单总结

版权声明:个人学习笔记记录 https://blog.csdn.net/Ratina/article/details/84344737

集合set:

  1. 有序存储元素,默认从小到大。
  2. 不会有重复元素,相同元素存入集合set后也只有一个。
  3. 内部利用了红黑树,检索、插入、删除等操作效率高。

#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

猜你喜欢

转载自blog.csdn.net/Ratina/article/details/84344737