zoukankan      html  css  js  c++  java
  • sort 结构体 正数负数分开排序

    对于结构体排序的一点点记录,之前遇到过结构体排序,个人比较喜欢使用在结构体当中直接重载小于号的方法,

    例如说:

    struct Node{
        int index;
        int del;
        bool operator < (const Node& b)const{
            //非递减的排序
            return del < b.del;
        }
    }node[maxn];

    知道里这一点我们就可以拿正数和负数分开了排序了,如下:

    struct Node{
        int index;
        int del;
        bool operator < (const Node& b)const{
            //都是正数的时候,非递增排序
            if (del > 0 && b.del > 0)
                return del > b.del;
                    //都是非正数的时候,非递减排序
            if (del <= 0 && b.del <= 0)
                return del < b.del;
                    //正数和负数比较时,负数在前面 
                return del < b.del;
        }
    }node[maxn];    

    来写个代码看看:

    #include<string>
    #include<cmath>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<functional>
    using namespace std;
    const int maxn = 2e5 + 10;
    struct Node{
        int index;
        int del;
        bool operator < (const Node& b)const{
            
            if (del > 0 && b.del > 0)
                return del > b.del;
            if (del <= 0 && b.del <= 0)
                return del < b.del;
            return del < b.del;
        }
    }node[maxn];
    int n;
    int main(){
        
        while (cin >> n){
            for (int i = 0; i < n; i++){
                int demo; cin >> demo;
                node[i].index = i;
                node[i].del = demo;
            }
            sort(node, node + n);
            cout << "--------------" << endl;
            for (int i = 0; i < n; i++)
                cout << node[i].del << endl;
            cout << "--------------" << endl;
        }
        return 0;
    }

    运行结果像这样:

  • 相关阅读:
    第二次冲刺每日站立会议10(完结)
    第二次冲刺每日站立会议09
    第二次冲刺每日站立会议08
    找bug
    测试计划
    博客园的意见与建议
    第二次每日站立会议07
    个人总结
    学习进度条(第十六周)
    梦断代码阅读笔记03
  • 原文地址:https://www.cnblogs.com/zengguoqiang/p/10060658.html
Copyright © 2011-2022 走看看