STL容器-set
<span data-docs-delta="[[20,"一、什么是 set","31:2|inline-dir:\"ltr\""],[20,"\n","24:\"UOsv\"|32:2|direction:\"ltr\""],[20,"set 是关联容器的一种,是排序好的集合(元素已经进行了排序),set 中不能有重复的元素。","27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"gZLi\"|direction:\"ltr\""],[20,"注意","0:\"initial\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,":","27:\"12\"|31:2"],[20,"\n","24:\"QvIJ\"|direction:\"ltr\""],[20,"不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。因此,如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素。","0:\"var(--md-box-samantha-normal-text-color)\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","0:\"var(--md-box-samantha-normal-text-color)\"|24:\"nr6L\"|27:\"12\"|bullet-id:\"fd7X\"|bullet:\"circle\"|direction:\"ltr\""],[20,"multiset 容器就像 set 容器,但它可以保存重复的元素。","0:\"var(--md-box-samantha-normal-text-color)\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","0:\"var(--md-box-samantha-normal-text-color)\"|24:\"ev1N\"|27:\"12\"|bullet-id:\"fd7X\"|bullet:\"circle\"|direction:\"ltr\""],[20,"set 支持双向迭代器(不支持随机迭代器),在插入和删除时,要特别注意。","0:\"var(--md-box-samantha-normal-text-color)\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","0:\"var(--md-box-samantha-normal-text-color)\"|24:\"90Vd\"|27:\"12\"|bullet-id:\"fd7X\"|bullet:\"circle\"|direction:\"ltr\""],[20,"在 STL 中使用结构体,需要对特定要求的运算符进行重载;STL 默认使用小于号来排序,因此,默认重载小于号;(如果使用 greater<> 比较器就需重载大于号),且要注意让比较函数对相同元素返回 false。","0:\"var(--md-box-samantha-normal-text-color)\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","0:\"var(--md-box-samantha-normal-text-color)\"|24:\"EKTJ\"|27:\"12\"|bullet-id:\"fd7X\"|bullet:\"circle\"|direction:\"ltr\""],[20,"二、set 相关函数","31:2|inline-dir:\"ltr\""],[20,"\n","24:\"RARe\"|32:2|direction:\"ltr\""],[20,"使用时注意包含头文件<set>","27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"q58E\"|direction:\"ltr\""],[30,[{"A1":[40,[[20,"函数名","26:\"54772603\"|8:1|inline-dir:\"ltr\""],[20,"\n","24:\"3LZ2\"|7:1|direction:\"ltr\""]],"1:\"%23a3e043\"|25:\"9KFE\"|7:1|8:1"],"A2":[40,[[20,"begin()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"qYlu\"|7:1|direction:\"ltr\""]],"25:\"gJnT\"|7:1"],"A3":[40,[[20,"end()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"CqwD\"|7:1|direction:\"ltr\""]],"25:\"bi0g\"|7:1"],"A4":[40,[[20,"insert()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"nm4I\"|7:1|direction:\"ltr\""]],"25:\"cfMd\"|7:1"],"A5":[40,[[20,"erase(开始地址,结束地址)","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"I4FV\"|7:1|direction:\"ltr\""]],"25:\"XuBa\"|7:1"],"A6":[40,[[20,"find()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"W8J7\"|7:1|direction:\"ltr\""]],"25:\"8STz\"|7:1"],"A7":[40,[[20,"clear()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"Ywq1\"|7:1|direction:\"ltr\""]],"25:\"UllJ\"|7:1"],"A8":[40,[[20,"size()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"zCkw\"|7:1|direction:\"ltr\""]],"25:\"LifU\"|5:1|7:1"],"A9":[40,[[20,"empty()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"ZNEa\"|7:1|direction:\"ltr\""]],"25:\"63mn\"|5:1|7:1"],"B1":[40,[[20,"函数说明","26:\"54772603\"|8:1|inline-dir:\"ltr\""],[20,"\n","24:\"8kBo\"|7:1|direction:\"ltr\""]],"1:\"%23a3e043\"|25:\"sLV9\"|7:1|8:1"],"B2":[40,[[20,"获取set容器的起始地址","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"Vr0q\"|7:1|direction:\"ltr\""]],"25:\"Goei\"|7:1"],"B3":[40,[[20,"获取set容器的结束地址","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"KDml\"|7:1|direction:\"ltr\""]],"25:\"Q7ZE\"|7:1"],"B4":[40,[[20,"插入set容器","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"DR68\"|7:1|direction:\"ltr\""]],"25:\"Gwgq\"|7:1"],"B5":[40,[[20,"删除set容器指定范围之间的元素,set也支持直接删除值","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"i25K\"|7:1|direction:\"ltr\""]],"25:\"0Ime\"|7:1"],"B6":[40,[[20,"查找匹配的元素迭代器,若不存在,返回set.end()","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"dLon\"|7:1|direction:\"ltr\""]],"25:\"U827\"|7:1"],"B7":[40,[[20,"清空set容器","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"KROn\"|7:1|direction:\"ltr\""]],"25:\"c5aD\"|7:1"],"B8":[40,[[20,"返回set容器个数","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"w4sz\"|7:1|direction:\"ltr\""]],"25:\"Kk2p\"|5:1|7:1"],"B9":[40,[[20,"判断set容器是否为空","26:\"54772603\"|inline-dir:\"ltr\""],[20,"\n","24:\"i0ML\"|7:1|direction:\"ltr\""]],"25:\"pzqh\"|5:1|7:1"]},[[10,9,"26:\"54772603\""]],[[10,2,"26:\"54772603\"|3:308"]]],"25:\"aYEoxl\"|readOnly:false"],[20,"注意:如果要使用 set,请引入<set>头文件,如果要引入 greater<T>和 less<T>比较器,请引入<functional>头文件。","0:\"rgba(0%2C%200%2C%200%2C%200.85)\"|27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"pd6I\"|direction:\"ltr\""],[20,"#include <bits/stdc++.h>"],[20,"\n","24:\"wuUh\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"using namespace std;"],[20,"\n","24:\"YeZB\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"phoV\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"int main(){"],[20,"\n","24:\"Hak1\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //定义长度为0的set"],[20,"\n","24:\"KtZf\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //set<int> s;"],[20,"\n","24:\"cjg0\"|36:22|42:\"true\"|direction:\"ltr\""],[20," int a[] = {50,10,30,10,20,40};"],[20,"\n","24:\"TSSu\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //利用数组初始化set"],[20,"\n","24:\"bESQ\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //默认比较器是less<T>:由小到大"],[20,"\n","24:\"gcDZ\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //set<int,less<int> > s(a,a+6);"],[20,"\n","24:\"tLZR\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"YxSR\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //可以使用greater<T>比较器:由大到小"],[20,"\n","24:\"Xk2q\"|36:22|42:\"true\"|direction:\"ltr\""],[20," set<int,greater<int> > s(a,a+6);"],[20,"\n","24:\"6AYb\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"kVNe\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //插入到特定的位置:插入到特定位置意义不大,因为插入结束后会重新排序"],[20,"\n","24:\"nh4o\"|36:22|42:\"true\"|direction:\"ltr\""],[20," // s.insert(s.begin(),60);"],[20,"\n","24:\"Jii2\"|36:22|42:\"true\"|direction:\"ltr\""],[20," s.insert(60);//插入元素60"],[20,"\n","24:\"mL7X\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //删除set中的第1个元素"],[20,"\n","24:\"xVyn\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t//s.erase(s.begin());"],[20,"\n","24:\"fnB7\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t//删除值为元素40"],[20,"\n","24:\"yoNT\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t//s.erase(40);"],[20,"\n","24:\"ejQ7\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"mYYO\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t\t//遍历set中的元素"],[20,"\n","24:\"ok4Q\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\tset<int>::iterator it;"],[20,"\n","24:\"KmqR\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t/*"],[20,"\n","24:\"pi2e\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t使用find查找元素的位置,返回迭代器,"],[20,"\n","24:\"pE4Z\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t如果没有这个元素,返回set.end()"],[20,"\n","24:\"Vne3\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t*/"],[20,"\n","24:\"RcY1\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\tit = s.find(300);"],[20,"\n","24:\"3Eb2\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t//*it = 300;//错误,不能直接修改set中的元素"],[20,"\n","24:\"1e1o\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\tif(it != s.end()){"],[20,"\n","24:\"NfrQ\"|36:22|42:\"true\"|direction:\"ltr\""],[20," \tcout<<*it<<\"存在!\"<<endl;"],[20,"\n","24:\"Ofdf\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t}else{"],[20,"\n","24:\"DRh1\"|36:22|42:\"true\"|direction:\"ltr\""],[20," \tcout<<\"元素不存在!\"<<endl;"],[20,"\n","24:\"ZIwG\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t}"],[20,"\n","24:\"KalK\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"z1iT\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\tfor(it = s.begin();it != s.end();it++){"],[20,"\n","24:\"k9JQ\"|36:22|42:\"true\"|direction:\"ltr\""],[20," \tcout<<*it<<\" \";"],[20,"\n","24:\"QRHq\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t}"],[20,"\n","24:\"Mjob\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\tcout<<endl;"],[20,"\n","24:\"MO5d\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\t"],[20,"\n","24:\"PlEb\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"}"],[20,"\n","24:\"vkYn\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"neSd\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"三、less<T> 和greater<T>比较器","inline-dir:\"ltr\""],[20,"\n","24:\"cn7M\"|32:2|direction:\"ltr\""],[20,"#include <bits/stdc++.h>"],[20,"\n","24:\"UX2g\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"using namespace std;"],[20,"\n","24:\"OLOK\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"3NHf\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"int main(){"],[20,"\n","24:\"uenS\"|36:22|42:\"true\"|direction:\"ltr\""],[20," int a[] = {2,1,3,5,4};"],[20,"\n","24:\"Lizl\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //默认升序"],[20,"\n","24:\"mAvD\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //sort(a,a+5);"],[20,"\n","24:\"JVsT\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //sort(a,a+5,less<int>());"],[20,"\n","24:\"Snh4\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"QIMG\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //使用greater<T>比较器使排序降序"],[20,"\n","24:\"0Lt4\"|36:22|42:\"true\"|direction:\"ltr\""],[20," sort(a,a+5,greater<int>());"],[20,"\n","24:\"vF47\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"gyWL\"|36:22|42:\"true\"|direction:\"ltr\""],[20," for(int i = 0;i < 5;i++){"],[20,"\n","24:\"mbKb\"|36:22|42:\"true\"|direction:\"ltr\""],[20," cout<<a[i]<<\" \";"],[20,"\n","24:\"ZAHL\"|36:22|42:\"true\"|direction:\"ltr\""],[20," }"],[20,"\n","24:\"Ha7m\"|36:22|42:\"true\"|direction:\"ltr\""],[20," cout<<endl;"],[20,"\n","24:\"pimV\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"FKMF\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //const修饰的变量表示常量,值不能修改"],[20,"\n","24:\"tz2i\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //常量一般来说要全部大写(INT_MAX,INT_MIN就是系统定义的常量)"],[20,"\n","24:\"ya80\"|36:22|42:\"true\"|direction:\"ltr\""],[20," const int X = 10;"],[20,"\n","24:\"TEuL\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //X = 20;"],[20,"\n","24:\"f8Mv\"|36:22|42:\"true\"|direction:\"ltr\""],[20," cout<<X<<endl;"],[20,"\n","24:\"w5Dh\"|36:22|42:\"true\"|direction:\"ltr\""],[20," return 0;"],[20,"\n","24:\"EDpK\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"}"],[20,"\n","24:\"I9KV\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"5nzK\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"四、set存放结构体","inline-dir:\"ltr\""],[20,"\n","24:\"vlYI\"|32:2|direction:\"ltr\""],[20,"#include<bits/stdc++.h>"],[20,"\n","24:\"WLhb\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"using namespace std;"],[20,"\n","24:\"KzUq\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"IeYm\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"//存放同学信息的结构体"],[20,"\n","24:\"vvrm\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"struct Student{"],[20,"\n","24:\"nCOH\"|36:22|42:\"true\"|direction:\"ltr\""],[20," int num;"],[20,"\n","24:\"T38Y\"|36:22|42:\"true\"|direction:\"ltr\""],[20," string name;"],[20,"\n","24:\"FNSW\"|36:22|42:\"true\"|direction:\"ltr\""],[20," int score;"],[20,"\n","24:\"przO\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"kxoW\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //重载operator运算符<"],[20,"\n","24:\"JlGn\"|36:22|42:\"true\"|direction:\"ltr\""],[20," bool operator>(const Student &s) const"],[20,"\n","24:\"x6Zn\"|36:22|42:\"true\"|direction:\"ltr\""],[20," {"],[20,"\n","24:\"nVxv\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //规则:按照分数降序,分数相同按照学号降序"],[20,"\n","24:\"1rN5\"|36:22|42:\"true\"|direction:\"ltr\""],[20," if(score > s.score || score == s.score && num > s.num){"],[20,"\n","24:\"BApM\"|36:22|42:\"true\"|direction:\"ltr\""],[20," return true;"],[20,"\n","24:\"pbB7\"|36:22|42:\"true\"|direction:\"ltr\""],[20," } else{"],[20,"\n","24:\"Qgde\"|36:22|42:\"true\"|direction:\"ltr\""],[20," return false;"],[20,"\n","24:\"g8wz\"|36:22|42:\"true\"|direction:\"ltr\""],[20," }"],[20,"\n","24:\"10jM\"|36:22|42:\"true\"|direction:\"ltr\""],[20," }"],[20,"\n","24:\"A86V\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"};"],[20,"\n","24:\"iUVT\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"0xcg\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"int main(){"],[20,"\n","24:\"AM7A\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //set<Student,less<Student> > s;"],[20,"\n","24:\"SLvG\"|36:22|42:\"true\"|direction:\"ltr\""],[20," set<Student,greater<Student> > s;"],[20,"\n","24:\"e6F1\"|36:22|42:\"true\"|direction:\"ltr\""],[20," Student s1 = {2,\"Zhang\",100};"],[20,"\n","24:\"L6FG\"|36:22|42:\"true\"|direction:\"ltr\""],[20," Student s2 = {3,\"Wang\",98};"],[20,"\n","24:\"77uM\"|36:22|42:\"true\"|direction:\"ltr\""],[20," Student s3 = {1,\"Li\",98};"],[20,"\n","24:\"sony\"|36:22|42:\"true\"|direction:\"ltr\""],[20," Student s4 = {3,\"Wang\",98};"],[20,"\n","24:\"PjHU\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"b3iv\"|36:22|42:\"true\"|direction:\"ltr\""],[20," s.insert(s1);"],[20,"\n","24:\"lZe8\"|36:22|42:\"true\"|direction:\"ltr\""],[20," s.insert(s2);"],[20,"\n","24:\"IE1e\"|36:22|42:\"true\"|direction:\"ltr\""],[20," s.insert(s3);"],[20,"\n","24:\"XxHH\"|36:22|42:\"true\"|direction:\"ltr\""],[20," s.insert(s4);"],[20,"\n","24:\"fRY9\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"GliH\"|36:22|42:\"true\"|direction:\"ltr\""],[20," //it是一个迭代器(指针)"],[20,"\n","24:\"HU2J\"|36:22|42:\"true\"|direction:\"ltr\""],[20," set<Student>::iterator it;"],[20,"\n","24:\"vHP5\"|36:22|42:\"true\"|direction:\"ltr\""],[20," for(it = s.begin();it != s.end();it++){"],[20,"\n","24:\"pmuD\"|36:22|42:\"true\"|direction:\"ltr\""],[20," cout<<it->num<<\" \"<<it->name<<\" \"<<it->score<<endl;"],[20,"\n","24:\"ToZH\"|36:22|42:\"true\"|direction:\"ltr\""],[20," }"],[20,"\n","24:\"P7tc\"|36:22|42:\"true\"|direction:\"ltr\""],[20," return 0;"],[20,"\n","24:\"92Qx\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"}"],[20,"\n","24:\"FX8D\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"A7Cw\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"\n","24:\"88qe\"|36:22|42:\"true\"|direction:\"ltr\""],[20,"注意:","31:2|inline-dir:\"ltr\""],[20,"\n","24:\"LxVA\"|32:3|direction:\"ltr\""],[20,"(1)当在 STL 应用中使用结构体时,需要对特定要求的运算符进行重载;STL 中的排序默认使用小于号来排序,因此,在对结构体排序时,需要重载小于号!","27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"tg0Z\"|direction:\"ltr\""],[20,"(2)如果要使用 greater<Student>比较器,就要对 > 比较运算符进行重载。","27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"iJYt\"|direction:\"ltr\""],[20,"(3)要注意:让比较函数对相同元素返回 false。","27:\"12\"|31:2|inline-dir:\"ltr\""],[20,"\n","24:\"iIv9\"|direction:\"ltr\""]]" data-copy-origin="https://shimo.im">
一、什么是 set
set 是关联容器的一种,是排序好的集合(元素已经进行了排序),set 中不能有重复的元素。
注意:
- 不能直接修改 set 容器中元素的值。因为元素被修改后,容器并不会自动重新调整顺序,于是容器的有序性就会被破坏,再在其上进行查找等操作就会得到错误的结果。因此,如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素。
- multiset 容器就像 set 容器,但它可以保存重复的元素。
- set 支持双向迭代器(不支持随机迭代器),在插入和删除时,要特别注意。
- 在 STL 中使用结构体,需要对特定要求的运算符进行重载;STL 默认使用小于号来排序,因此,默认重载小于号;(如果使用 greater<> 比较器就需重载大于号),且要注意让比较函数对相同元素返回 false。
二、set 相关函数
使用时注意包含头文件<set>
函数名
|
函数说明
|
begin()
|
获取set容器的起始地址
|
end()
|
获取set容器的结束地址
|
insert()
|
插入set容器
|
erase(开始地址,结束地址)
|
删除set容器指定范围之间的元素,set也支持直接删除值
|
find()
|
查找匹配的元素迭代器,若不存在,返回set.end()
|
clear()
|
清空set容器
|
size()
|
返回set容器个数
|
empty()
|
判断set容器是否为空
|
注意:如果要使用 set,请引入<set>头文件,如果要引入 greater<T>和 less<T>比较器,请引入<functional>头文件。
#include <bits/stdc++.h> using namespace std;int main(){ //定义长度为0的set //set<int> s; int a[] = {50,10,30,10,20,40}; //利用数组初始化set //默认比较器是less<T>:由小到大 //set<int,less<int> > s(a,a+6);
//可以使用greater<T>比较器:由大到小 set<int,greater<int> > s(a,a+6); //插入到特定的位置:插入到特定位置意义不大,因为插入结束后会重新排序 // s.insert(s.begin(),60); s.insert(60);//插入元素60 //删除set中的第1个元素 //s.erase(s.begin()); //删除值为元素40 //s.erase(40); //遍历set中的元素 set<int>::iterator it; /* 使用find查找元素的位置,返回迭代器, 如果没有这个元素,返回set.end() */ it = s.find(300); //*it = 300;//错误,不能直接修改set中的元素 if(it != s.end()){ cout<<*it<<"存在!"<<endl; }else{ cout<<"元素不存在!"<<endl; } for(it = s.begin();it != s.end();it++){ cout<<*it<<" "; } cout<<endl;
}
三、less<T> 和greater<T>比较器
#include <bits/stdc++.h> using namespace std;int main(){ int a[] = {2,1,3,5,4}; //默认升序 //sort(a,a+5); //sort(a,a+5,less<int>());
//使用greater<T>比较器使排序降序 sort(a,a+5,greater<int>()); for(int i = 0;i < 5;i++){ cout<<a[i]<<" "; } cout<<endl; //const修饰的变量表示常量,值不能修改 //常量一般来说要全部大写(INT_MAX,INT_MIN就是系统定义的常量) const int X = 10; //X = 20; cout<<X<<endl; return 0;
}
四、set存放结构体
#include<bits/stdc++.h> using namespace std;//存放同学信息的结构体 struct Student{ int num; string name; int score;
//重载operator运算符< bool operator>(const Student &s) const { //规则:按照分数降序,分数相同按照学号降序 if(score > s.score || score == s.score && num > s.num){ return true; } else{ return false; } }
};
int main(){ //set<Student,less<Student> > s; set<Student,greater<Student> > s; Student s1 = {2,"Zhang",100}; Student s2 = {3,"Wang",98}; Student s3 = {1,"Li",98}; Student s4 = {3,"Wang",98};
s.insert(s1); s.insert(s2); s.insert(s3); s.insert(s4); //it是一个迭代器(指针) set<Student>::iterator it; for(it = s.begin();it != s.end();it++){ cout<<it->num<<" "<<it->name<<" "<<it->score<<endl; } return 0;
}
注意:
(1)当在 STL 应用中使用结构体时,需要对特定要求的运算符进行重载;STL 中的排序默认使用小于号来排序,因此,在对结构体排序时,需要重载小于号!
(2)如果要使用 greater<Student>比较器,就要对 > 比较运算符进行重载。
(3)要注意:让比较函数对相同元素返回 false。
</span>
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 7
- 开始于
- 2025-3-12 11:00
- 结束于
- 2025-5-25 15:00
- 持续时间
- 1780 小时
- 主持人
- 参赛人数
- 26