set是C++STL库里的一种容器(或者“个”?),便于用户对一个数组进行去重等操作,常用于去重或做不可重集等用法,对于数据量较大时的去重,set可谓是不错的选择。
1.2 set的定义set<数据类型> set名; 例如 sets;
这样就定义好了一个int类型的set。
1.3 set的使用以下是set的基础用法(有错欢迎指出)
set.begin(); // set的首地址,常用于迭代器 set.end(); // set尾地址后的一位的地址,常用于迭代器 set.insert(num); // 在set中加入某个元素,切记不是插入,因为set是一个集合而不是线性表之类的东西 set.erase(num); // 直接删除num这个元素 set.erase(l,r); // 删除set中l到r区间内的所有元素(基于迭代器) set.find(num); // 查找num这个元素,返回地址,如果没有应该是返回一个空指针之类的 set.size(); // 返回set内元素的个数 set.empty(); // 返回一个bool,如果set为空返回1,否则返回0 set.clear(); // 清空set1.4 set的迭代器
想挨个访问或访问指定元素(set里的元素),必须使用迭代器,还是那句话,set是容器、集合,不是线性表,所以没有下标(可以去学学链式前向星)
以下是set定义迭代器和使用迭代器访问set元素的方法
set<数据类型(必须与要访问的set类型一致)>::iterator 迭代器名; 例如 set2.1 例题演示s; set ::iterator it; for(int i=1;i<=10;i++) set.insert(i); for(it=s.begin();it!=s.end();it++){ cout<<*it<<"n"; // 输出set中的it地址的元素 }
明明的随机数
很经典的题,要求完成去重与排序两个操作,先演示普通做法
#include#include #include using namespace std; const int MAXN=108 int n,tmp,maxn=-1; bool a[MAXN]; int main(){ cin>>n; while(n--){ cin>>tmp; if(a[tmp]==0) a[tmp]=1; // 用flag数组打标记完成去重 maxn=max(maxn,tmp); // 记录边界值 } for(int i=0;i<=maxn;i++){ if(a[i]==1){ cout< 当然,桶的做法局限性很大,数据范围但凡是10000个小于等于1e9的数,那么桶就直接pass掉了
接下来是万能的set做法STL赛高#include#include #include using namespace std; set s; set ::iterator it; int n,tmp; int main(){ cin>>n; while(n--){ cin>>tmp; s.insert(tmp); } for(it=s.begin();it!=s.end();it++){ cout<<*it<<" "; } return 0; } 与桶相比是不是简单多了呢?
2.2 set的内部排序如果你想把set降序排序或升序排序,必须在定义时予以设定
bool cmp(int x,int y){ return x>y; // 降序,反之升序x3.1 结尾s; // 一样的道理,比较函数与set数据类型保持一致 以上就是set的基本用法啦,如果你觉得这篇博文还阔以的话不妨点个赞qwq
感谢小主看到这里~



