#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;
set<int> dict;
int main()
{
int num;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"排序之后"<<endl;
for (set<int>::iterator it = dict.begin();it != dict.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
return 0;
}
升序排列
#include <iostream> //对于重复的数字将会忽略
#include <string>
#include <set>
#include <sstream>
using namespace std;
set<int> dict;
int main()
{
int num,flag=1;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"排序之后"<<endl;
for (set<int>::iterator it = dict.end();it != dict.begin();it--)
{
if(flag) it--,flag=0;
cout<<*it<<" ";
}
cout<<*(dict.begin());
cout<<endl;
return 0;
}
降序排列
也可以用反向迭代
#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;
set<int> dict;
int main()
{
int num;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"排序之后"<<endl;
for (set<int>::reverse_iterator it = dict.rbegin();it != dict.rend();it++)
{
cout<<*it<<" ";
}
cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
return 0;
}
或者自定义比较规则
1.元素不是结构体
#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;
struct mycom
{
bool operator () (const int &a,const int &b) //重载()
{
if (a != b)
{
return a>b;
}
else
return a>b;
}
};
int main()
{
int num;
set<int,mycom> dict;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"排序之后"<<endl;
for (set<int,mycom>::iterator it = dict.begin();it != dict.end();it++)
{
cout<<*it<<" ";
}
cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
return 0;
}
2.元素是结构体
#include<iostream>
#include<set>
#include<string>
using namespace std;
struct Info
{
string name;
double score;
bool operator < (const Info &a) const // 重载“<”操作符,自定义排序规则
{
//按score由大到小排序。如果要由小到大排序,使用“>”即可。
return a.score < score;
}
};
int main()
{
set<Info> s;
Info info;
//插入三个元素
info.name = "Jack";
info.score = 80;
s.insert(info);
info.name = "Tom";
info.score = 99;
s.insert(info);
info.name = "Steaven";
info.score = 60;
s.insert(info);
set<Info>::iterator it;
for(it = s.begin(); it != s.end(); it++)
cout << (*it).name << " : " << (*it).score << endl;
return 0;
}
删除与清空
#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;
set<int> dict;
int main()
{
int num;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"(升序)排序之后"<<endl;
for (set<int>::iterator it = dict.begin();it != dict.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
cout<<"需要删除的数字为 ";
cin>>num;
dict.erase(num);
for (set<int>::reverse_iterator rit = dict.rbegin();rit != dict.rend();rit++)
{
cout<<*rit<<" ";
}
cout<<endl<<"清空之后 ";
dict.clear();
cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
return 0;
}
查找
#include <iostream>
#include <string>
#include <set>
#include <sstream>
using namespace std;
set<int> dict;
int main()
{
int num;
cout<<"输入一串数字,以0结束"<<endl;
while (cin>>num,num)
{
dict.insert(num);
}
cout<<"(升序)排序之后"<<endl;
for (set<int>::iterator it = dict.begin();it != dict.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
cout<<"查找的数为 ";
cin>>num;
it = dict.find(num);
if(it == dict.end())
cout<<"not found";
else
cout<<*it;
cout<<endl<<dict.size()<<endl;//验证重复元素不会插入
return 0;
}