STL set

感谢http://blog.csdn.net/ac_hexin/article/details/52042562

set

如果需要集合中的元素允许重复那么可以使用multiset

1.创建set集合对象

创建set对象时,需要指定元素的类型,这一点和其他容器一样。

1 set<int> s;

2.元素的插入与中序遍历

采用inset()方法把元素插入到集合中,插入规则在默认的比较规则下,是按元素值从小到大插入,如果自己指定了比较规则函数,则按自定义比较规则函数插入。使用前向迭代器对集合中序遍历,结果正好是元素排序后的结果。

 1 s.insert(5); //第一次插入5,可以插入
 2 s.insert(1);
 3 s.insert(6);
 4 s.insert(3);
 5 s.insert(5); //第二次插入5,重复元素,不会插入
 6 set<int>::iterator it; //定义前向迭代器
 7 //中序遍历集合中的所有元素
 8 for(it = s.begin(); it != s.end(); it++)
 9 {
10     cout << *it << " ";
11 }

3.元素的方向遍历

使用反向迭代器reverse_iterator可以反向遍历集合,输出的结果正好是集合元素的反向排序结果。

它需要用到rbegin()和rend()两个方法,它们分别给出了反向遍历的开始位置和结束位置。

1 set<int>::reverse_iterator rit; //定义反向迭代器
2 //反向遍历集合中的所有元素
3 for(rit = s.rbegin(); rit != s.rend(); rit++)
4 {
5     cout << *rit << " ";
6 }

4.元素的检索

使用find()方法对集合进行检索,如果找到查找的的键值,则返回该键值的迭代器位置;否则,返回集合最后一个元素后面的一个位置,即end()。

1 set<int>::iterator it;
2 it = s.find(6); //查找键值为6的元素
3 if(it != s.end())
4     cout << *it << endl;
5 else
6     cout << "not find it" << endl;

5.元素删除

可以直接删键值,也可以删除一个迭代器

1 s.erase(6); //删除键值为6的元素
2 it=s.begin();
3 it=s.erase(it); //返回新的第一个元素

还可以删除一个区间的数:

1  for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
2   itlow=myset.lower_bound (30);                           ^  
3   itup=myset.upper_bound (60);                                                ^
4   myset.erase(itlow,itup);                     // 10 20 70 80 90

Set常用函数:

 1 begin()--返回指向第一个元素的迭代器
 2 clear()--清除所有元素
 3 count()--返回某个值元素的个数
 4 empty()--如果集合为空,返回true
 5 end()--返回指向最后一个元素的迭代器
 6 erase()--删除集合中的元素
 7 find()--返回一个指向被查找到元素的迭代器
 8 insert()--在集合中插入元素
 9 lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器
10 rbegin()--返回指向集合中最后一个元素的反向迭代器
11 rend()--返回指向集合中第一个元素的反向迭代器
12 upper_bound()--返回大于某个值元素的迭代器
原文地址:https://www.cnblogs.com/Y-E-T-I/p/7763887.html