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; }
运行结果像这样: