set之iterator

定义:set::iterator iter

运用:*iter

遍历 for(iter=set.begin();iter!=set.end();iter++)

还可以直接用auto it=set.begin() (auto是自动匹配类型)

注意
iterator只能用++,–运算符。不能*(iter-1),另外还要注意iter++后自身会改变

例:set中有0,2,4,iter指向2,现在cout<<iter<<” “<<(iter—)<<endl;

输出0,2,先执行iter–,我也不知道为什么

set之lower_bound()

lower_bound()返回从first开始的第一个大于或等于val的元素的地址。如果所有元素都小于val,则返回last的地址,所以必须要

set<int>::iterator iter;
iter=st.lower_bound(一个数字)

upper_bound()返回最后一个大于等于val的元素的地址

set基础

定义:set<数据类型> 标识符 ,set中元素都唯一

set实际上运用了红黑树。另外,set中元素会自动排序

函数

begin(),返回的是开头元素迭代器

end()

clear()

empty()

size()

进阶

count(数据)判断某个值是否在set中

  • erase(iterator) 删去迭代器所指向的值

  • erase(iteratora,iteratorb)删去a,b之间的值

  • erase(数据)删去该数据

  • set删除是不会检查任何错误的,使用时小心

find(数据)返回指定元素的迭代器,没有则返回最后一个元素的迭代器

当set中没有元素的时候,*s.end()=0

insert(某一个值),将一个值插入set中,注意这是唯一的将元素弄到set中的方法,并且重复插入无效

判断insert插入是否成功的方法(具体可看)
//typedef pair<iterator, bool> _Pairib;
    pair<set<Student,FuncStudent>::iterator,bool> pair1=set1.insert(s1);
    if(pair1.second==true)
    {
        cout<<"插入s1成功"<<endl;
    }
    else
    {
        cout<<"插入s1失败"<<endl;
    }