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()--返回大于某个值元素的迭代器