C++结构体排序个人总结(运算符重定义,比较器)

来源:互联网 发布:eclipse java mars汉化 编辑:程序博客网 时间:2024/05/16 06:45

前几天做蓝桥杯题目有一题有用到结构体排序,刚开始使用比较器,然后sort()排序一下就可以,后来参考别人的代码发现还可以用运算符重定义,着实省事很多,省的再在结构体外面写一个比较器的方法,所以现在总结一下:

第一种:结构体内重定义 (‘  <  ’符号),然后sort就可以排序

#include"iostream"#include"algorithm"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank < n.rank;// rank > n.rank 降序  rank < n.rank 降序}}node[3];int main(){int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;sort(node,node + n);for(int i = 0;i < n;i++)cout << node[i].rank << endl;return 0;}
运行结果:升序(降序只需要改成 rank  > n.rank


第二种:比较器(结构体外定义比较器,然后调用sort时把相应的比较器输入

#include"iostream"#include"algorithm"#include"vector"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank < n.rank;// rank > n.rank 降序  rank < n.rank 降序}}node[3];bool cmp(Node a,Node b){//比较器写法1return a.rank > b.rank;//排序规则同上}bool cmp_const(const Node& a,const Node& b){//比较器写法2return a.rank > b.rank;}int main(){int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;sort(node, node + n,cmp_const);for(int i = 0;i < n;i++)cout << node[i].rank << endl;return 0;}
运行结果同上

因为主修的不是C++,所以关于写法1,写法2有什么区别还不清楚,等过两天问老师才知道,但是运行结果一样

写法1,2的区别

为了限定隐含的this指针,
即这个成员函数不能修改其数据成员
一般在类中这样用,这个成员函数的功能多数是get数据成员,即获得对象的某个数据,只读不写相关文章连接


应用:vector排序应用

#include"iostream"#include"algorithm"#include"vector"using namespace std;struct Node{int rank;bool operator<(const Node& n)const{//运算符重定义 return rank > n.rank;// rank > n.rank 降序  rank < n.rank 降序}}node[3];bool cmp(Node a,Node b){//比较器写法1return a.rank > b.rank;//排序规则同上}bool cmp_const(const Node& a,const Node& b){//比较器写法2return a.rank > b.rank;}int main(){vector<Node> v;int n = 3;for(int i = 0;i < n;i++)node[i].rank = i;for(int i = 0;i < n;i++)v.push_back(node[i]);sort(v.begin(), v.end());//操作符重定义//sort(v.begin(), v.end(),cmp);//比较器1//sort(v.begin(), v.end(),cmp_const);//比较器2for(int i = 0;i < n;i++)cout << v[i].rank << endl;return 0;}



0 0