首页 > 技术文章 > sort 结构体 正数负数分开排序

zengguoqiang 2018-12-03 20:27 原文

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

例如说:

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;
}

运行结果像这样:

 

推荐阅读