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

被折叠的 条评论
为什么被折叠?



