版权声明:原创文章,转载请注明出处 https://blog.csdn.net/hza419763578/article/details/88312713
set:内部自动有序且不含重复元素的容器
set<int> se;
set<int>::iterator it;
不支持*(it+1) //除了vector和string外都不支持 也就只有string和vector可以向数组那样[index]下标访问
se.insert(1);//插入数字1
se.find(1);//查找数字1 返回改值地址 未找到返回se.end()
se.erase(it);//删除it迭代器所指的元素
eg:se.insert(se.find(100));
se.erase(1);//直接以值为单位 删除值为1的元素 参数类型不同,函数重载可实现
se.erase(first,last);//删除迭代器指针[first,last)区间的所有元素
se.size();//set内元素个数
se.clear();//清空set内元素multiset//元素可以不唯一的集合
1.定义,插入,查找(insert find)
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> se;
//插入
se.insert(3);
se.insert(5);
se.insert(2);
se.insert(3);
set<int>::iterator it;
//输出 发现没有重复 且有序
cout<<"输出结果:(不重复,且有序)"<<endl;
for(it=se.begin();it!=se.end();it++){
cout<<*it<<" ";
}
//error 不可下标访问 因为不可*(it+i)访问
/*for(int i=0;i<se.size();i++){
cout<<se[i]<<" ";
}*/
//查找
int n;
cout<<"\n查找3:";
it=se.find(3);
if(it!=se.end()){
cout<<"找到"<<*it<<endl;
}else{
cout<<"未找到"<<endl;
}
cout<<"\n查找6:";
it=se.find(6);
if(it!=se.end()){
cout<<"找到"<<*it<<endl;
}else{
cout<<"未找到"<<endl;
}
cout<<endl;
return 0;
}
2.删除erase
#include<iostream>
#include <set>
using namespace std;
void print(set<int> se){
for(set<int>::iterator it=se.begin();it!=se.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
int main(){
set<int> se;
for(int i=1;i<=10;i++){
se.insert(i*100);
}
cout<<"开始:\n";
print(se);
se.erase(se.find(200));
se.erase(se.find(300));
cout<<"\n1.地址删除 se.erase(se.find(200));\n se.erase(se.find(300));后:\n";
print(se);
se.erase(500);
se.erase(600);
cout<<"\n2.值删除 se.erase(500);\n se.erase(600);后:\n";
print(se);
se.erase(se.find(700),se.end());
cout<<"\n3.区间删除 se.erase(se.find(700),se.end());后:\n";
print(se);
cout<<endl;
return 0;
}
3.clear size
#include<iostream>
#include<set>
using namespace std;
int main(){
set<int> se;
for(int i=1;i<=7;i++){
se.insert(i);
}
cout<<"se.size()="<<se.size()<<endl;
se.clear();
cout<<"se.size()="<<se.size()<<endl;
return 0;
}