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)用法大体类似(连头文件都没变)
不过
- 如果删除的话,相同的也一起删除了;
- 如果查找的话,返回该元素的迭代器的位置,若有相同,返回第一个元素的地址;