1.简介
set是C++STL库中的一个容器,他十分的便利,所有的元素插入时都会被自动排序,并且容器内保证元素不重复,就想高一数学中讲的集合具有互异性一样,(好像set本来就叫集合容器 bushi)
2.本质
set属于关联式容器,使用类似书的结构(基于红黑树的平衡二叉检索树)如图:
3.用处
构造set的主要目的就是为了快速检索和去重(检索的时间复杂度为O(logN));
4.set容器的使用
主要的函数如下:
insert() set容器唯一的插入数据的方式;
用法:
1 set<int> s; 2 s.insert(1);
size() 判断容器中的元素数目;
用法:
1 set<int> s; 2 for (int i=1;i<3;i++) 3 s.insert(i); 4 s.size();
empty() 判断容器是否为空;
用法:
1 set<int> s; 2 if(s.empty()){ 3 break; 4 {
erase(pos) 删除迭代器所指的元素,并返回下一个元素的迭代器;
用法:
1 set<int> s; 2 s.erase(s.begin());
find(key) 查找key这一元素书否存在,若存在,则返回该贱键的元素的迭代器,否则,则返回set.end();
用法:
1 set<int> s; 2 for (int i=1;i<=5;i++){ 3 s.insert(i); 4 } 5 set<int>::iterator ii; 6 ii = s.find(2); 7 if (ii != s.end()) 8 cout<<*ii<<endl;
count(key) 检索容器中key的元素个数,但刚才都说了元素插入set后会自动去重,所以返回的值只有0或1罢了(
另外,set容器本质是棵二叉树,所以检索的时间复杂度只有O(logN),比STL里的其他容器快好多。
用法:
cout<<s.count(1)<<endl;
5.迭代器
访问set集合容器中的元素,需要通过迭代器进行,他类似于指针,可以通过他来指向set中的某一元素的地址。例如:
set<int>::iterator ii;
就定义了一个set<int>类型的正向迭代器 ii。
迭代器分正向迭代器和反向迭代器,顾名思义,就是正向遍历和反向遍历的意思。
6.思考
自己找题吧,我找不到了(