关于set

https://zybuluo.com/ysner/note/1120663

功能

支持修改、删除、排序、去重等操作。

定义

include<set>
struct node{...};//在里面制定比较规则,否则就是按从小到大
set<node>s;
set<node>::iterator it;

函数

  • begin()返回set容器的第一个元素

  • end()返回set容器的最后一个元素

  • clear()删除set容器中的所有的元素

  • empty()判断set容器是否为空

  • size()返回当前set容器中的元素个数

  • count()用来查找set中某个某个键值是否出现。

  • equal_range()返回一对定位器,分别表示第一个大于或等于给定关键值的元素第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值。

pair<set<int>::const_iterator,set<int>::const_iterator> pr;
pr = s.equal_range(3);
cout<<"第一个大于等于 3 的数是 :"<<*pr.first<<endl;
cout<<"第一个大于 3的数是 : "<<*pr.second<<endl;
  • erase(iterator)删除定位器iterator指向的值
    erase(first,second)删除定位器first和second之间的值
    erase(key_value)删除键值key_value的值
    (说人话,就是删除first~second之间的数)
    Pay attention :由于不自带错误检查,小心RE
  • find()返回定位器,如果没找到则返回end()。
 set<int>::iterator iter;
 if((iter = s.find(2)) != s.end())
 {
   cout<<*iter<<endl;
}
  • lower_bound(key_value)返回第一个大于等于key_value的定位器
    upper_bound(key_value)返回最后一个大于等于key_value的定位器
cout<<*s.lower_bound(2)<<endl;

返回值

如果你要输出函数的返回值,要在前面加个\(*\)

cout<<*s.begin()<<endl;

如果你要把返回值存在变量里,就要这样定义

set<node> :: iterator it;

还有存\(pair\)的变量

pair<set<int>::const_iterator,set<int>::const_iterator> pr;

拓展

\(multiset\)\(set\)用法大体类似(连头文件都没变)
不过

  • 如果删除的话,相同的也一起删除了;
  • 如果查找的话,返回该元素的迭代器的位置,若有相同,返回第一个元素的地址;
posted @ 2018-04-21 09:05  小蒟蒻ysn  阅读(153)  评论(0)    收藏  举报