1.set了解:set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构,在set中查找是使用二分查找。
2.set具备的两个特点:set中的元素都是排序好的 ;set中的元素都是唯一的,没有重复的
3.常用工具:
insert(); //在集合中插入元素
begin(); // 返回指向第一个元素的迭代器
end(); // 返回指向set中的结尾,end()中是一个随便的数
clear(); // 清除所有元素
count(); // 返回某个值元素的个数,由于set中无重复元素,则count返回的就是0,1;也就是用来判断有无某个元素
empty(); // 如果集合为空,返回true
erase(); //删除集合中某个元素
find(); //返回一个指向被查找到元素的迭代器
lower_bound(); //返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound(); //返回大于某个值元素的迭代器
size(); //集合中元素的数目
max_size(); //返回集合能容纳的元素的最大限值
rbegin(); //返回指向集合中最后一个元素的反向迭代器
rend(); //返回指向集合中第一个元素的反向迭代器
insert()+begin()+end()+empty()+erase()+size()+max_size()
1 #include <iostream> 2 #include <cstdio> 3 #include <set> 4 #include <algorithm> 5 using namespace std; 6 7 int main() 8 { 9 set<int>s; 10 set<int>::iterator it; 11 s.insert(1); 12 s.insert(2); 13 s.insert(3); 14 s.insert(4); 15 s.insert(1); 16 17 for(it=s.begin(); it!=s.end(); it++){ 18 printf("%d\n",*it); 19 } 20 21 printf("set的size值为:%d\n",s.size()); 22 printf("set的maxsize值为:%d\n",s.max_size()); 23 printf("set中的第一个元素是:%d\n",*s.begin()); 24 25 it = s.end(); 26 it--; 27 printf("set中的最后一个元素:%d\n",*it); 28 29 s.erase(2); 30 it = s.end(); 31 it--; 32 printf("set中的最后一个元素:%d\n",*it); 33 34 s.erase(4); 35 it = s.end(); 36 it--; 37 printf("set中的最后一个元素:%d\n",*it); 38 39 40 for(it=s.begin(); it!=s.end(); it++){ 41 printf("%d\n",*it); 42 } 43 if( s.empty() ) printf("set为空\n"); 44 else printf("set不为空\n"); 45 46 s.clear(); 47 if( s.empty() ) printf("set为空\n"); 48 else printf("set不为空\n"); 49 50 printf("set的size值为:%d\n",s.size()); 51 printf("set的maxsize值为:%d\n",s.max_size()); 52 return 0; 53 }