注:因为set容器默认是升序要降序的话,就可以使用这三种方法
1、修改比较函数(默认less)
#include <iostream>#include <set>using namespace std;int main(int argc, const char * argv[]) { // insert code here... set<int,greater<int>> s; set<int,greater<int>> ::iterator iter; s.insert(1); s.insert(2); s.insert(3); s.insert(4); for(iter=s.begin();iter!=s.end();iter++) cout<<*iter<<" "; cout<<endl; return 0; }这个方法的重点就在于set<ing,gteater<int>> 中的 <gteater<int>>
greater表示内置类型从大到小排序,less表示内置类型从小到大排序
2、重载 < 运算符
#include <iostream>#include <set>#include <iterator>using namespace std;class Integer{ int data;public: Integer(int a=3){//这个地方a等于几没啥影响 data=a; } bool operator < (const Integer b) const{//语法要求必须重载成常成员函数 return data>b.data; } friend ostream & operator << (ostream & out,Integer a){//输出的是对象,必须重载输出 out<<a.data; return out; } };int main() { set<Integer> s; set<Integer>::iterator ite; Integer a(1),b(3); s.insert(a); s.insert(b); for(ite=s.begin();ite!=s.end();ite++){ cout<<*ite<<""; } return 0;}
3、自定义比较函数
#include<iostream>#include<set>using namespace std;struct mycomp{ //自定义比较函数,重载“()”操作符 bool operator() (const int &a, const int &b) { if(a != b) return a > b; else return a > b; }};int main(){ set<int, mycomp> s; //采用比较函数mycomp s.insert(5); //第一次插入5,可以插入 s.insert(1); s.insert(6); s.insert(3); s.insert(5); //第二次插入5,重复元素,不会插入 set<int,mycomp>::iterator it; for(it = s.begin(); it != s.end(); it++) cout << *it << " "; cout << endl; return 0;}
版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。