重载比较运算符

本文介绍了在C++中重载比较运算符的三种方式:1) 修改默认的less函数,例如使用greater<int>实现降序排序;2) 重载小于(<)运算符;3) 定义自定义的比较函数。这些方法适用于如set容器的排序需求。

重载比较运算符,现在我这里整理了三种方法

1、修改比较函数(默认less)

2、重载 < 运算符

3、自定义比较函数

 

  • 注:因为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;
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值