#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; }
时间: 2024-10-11 21:12:44