STL容器-set

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


//插入到特定的位置:插入到特定位置意义不大,因为插入结束后会重新排序
// s.insert(s.begin()&#44;60);
s.insert(60);//插入元素60
//删除set中的第1个元素
//s.erase(s.begin());
//删除值为元素40
//s.erase(40);


	//遍历set中的元素
set&lt;int&gt;::iterator it;
/*
使用find查找元素的位置,返回迭代器,
如果没有这个元素,返回set.end()
*/
it = s.find(300);
//*it = 300;//错误,不能直接修改set中的元素
if(it != s.end()){
	cout&lt;&lt;*it&lt;&lt;"存在!"&lt;&lt;endl;
}else{
	cout&lt;&lt;"元素不存在!"&lt;&lt;endl;
}


for(it = s.begin();it != s.end();it++){
	cout&lt;&lt;*it&lt;&lt;" ";
}
cout&lt;&lt;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&lt;T&gt;比较器使排序降序
sort(a&#44;a+5&#44;greater&lt;int&gt;());


for(int i = 0;i &lt; 5;i++){
    cout&lt;&lt;a[i]&lt;&lt;" ";
}
cout&lt;&lt;endl;


//const修饰的变量表示常量,值不能修改
//常量一般来说要全部大写(INT_MAX&#44;INT_MIN就是系统定义的常量)
const int X = 10;
//X = 20;
cout&lt;&lt;X&lt;&lt;endl;
return 0;

}

四、set存放结构体

#include<bits/stdc++.h>
using namespace std;

//存放同学信息的结构体 struct Student{ int num; string name; int score;

//重载operator运算符&lt;
bool operator&gt;(const Student &amp;s) const
{
    //规则:按照分数降序,分数相同按照学号降序
    if(score &gt; s.score || score == s.score &amp;&amp; num &gt; 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&lt;Student&gt;::iterator it;
for(it = s.begin();it != s.end();it++){
    cout&lt;&lt;it-&gt;num&lt;&lt;" "&lt;&lt;it-&gt;name&lt;&lt;" "&lt;&lt;it-&gt;score&lt;&lt;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