set用法

   考试中用set(c++自带的封装起来的红黑树)可以轻松水过平衡树,效率也很高。

    所以要稍稍存一下set具体怎么用了。

    multiset可以有重复的值,而set没有。

include<set>
multiset<int> st;
  st.clear()//清空
  st.insert(10)//插入元素10
  st.erase(10)//删除元素10
  st.begin()//返回第一个元素
  st.end()//返回最后一个
  st.empty()//判空
  st.size()//返回其大小   
   这些是最基础的,而考试中最总要的是如何利用指针it

   创建定位器,具体删除操作

erase(iterator)  ,删除定位器iterator指向的值
erase(first,second),删除定位器first和second之间的值
erase(key_value),删除键值key_value的值

[cpp] view plain copy
  1. set<int> s;  
  2. set<int>::const_iterator iter;  
  3. set<int>::iterator first;  
  4. set<int>::iterator second;  
  5. for(int i = 1 ; i <= 10 ; ++i)  
  6.     s.insert(i);  
  7. //第一种删除  
  8. s.erase(s.begin());  
  9. //第二种删除  
  10. first = s.begin();  
  11. second = s.begin();  
  12. second++;  
  13. second++;  
  14. s.erase(first,second);  
  15. //第三种删除  
  16. s.erase(8);  
元素检索
find()若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
[cpp] view plain copy
  1. <span style="font-size:18px;">set<int> s;  
  2. set<int>::iterator it;  
  3. it=s.find(5);    //查找键值为5的元素  
  4. if(it!=s.end())    //找到  
  5.     cout<<*it<<endl;  
  6. else            //未找到  
  7.     cout<<"未找到";</span>  
查找前驱和后继
[cpp] view plain copy
  1. <span style="font-size:18px;">set<int> s;  
  2. s.insert(1);  
  3. s.insert(3);  
  4. s.insert(4);  
  5. cout<<*s.lower_bound(2)<<endl;  
  6. cout<<*s.lower_bound(3)<<endl;  
  7. cout<<*s.upper_bound(3)<<endl;</span>  

posted @ 2017-10-06 20:19  Hzoi_QTY  阅读(856)  评论(0编辑  收藏  举报