STL--過載操作符與qsort排序
阿新 • • 發佈:2019-01-04
注意,用sort排序的時候,傳的是(開始位置的指標,接受比較的指標);
然後就是在結構體重,過載操作符,注意在結構體中,如果想按一定的規律排序是必須過載操作符的,包括< ==.
過載操作符下面是用qsort寫的.
程式碼如下:
#include <stdio.h> #include <algorithm> #include <stdlib.h> #include <string.h> using namespace std; struct Node{ int num; int l; int h; bool operator < (Node t) const//過載小於號 { int L1 = max(l, h); int H1 = min(l, h); int L2 = max(t.l, t.h); int H2 = min(t.l, t.h); if(num!=t.num) return num<t.num;//過載操作符 else { if(L1!=L2) return L1<L2; else return H1<H2; } } bool operator == (Node t) const//過載等於號 { int L1 = max(l, h); int H1 = min(l, h); int L2 = max(t.l, t.h); int H2 = min(t.l, t.h); return L1 == L2 && H1==H2; } }a[1005]; int main() { int T; int i; scanf("%d",&T); while(T--) { int m; scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d%d",&a[i].num,&a[i].l,&a[i].h); if (a[i].l < a[i].h) { swap(a[i].l, a[i].h); } } sort(a,a+m); m=unique(a,a+m)-a;//unique()需要的引數必須是指標 返回的也是指標. for(i=0;i<m;i++) printf("%d %d %d\n",a[i].num,a[i].l,a[i].h); } return 0; }
#include <stdio.h> #include <algorithm> #include <stdlib.h> #include <string.h> using namespace std; /*struct Node{ int num; int l; int h; bool operator < (Node t) const//過載小於號 { int L1 = max(l, h); int H1 = min(l, h); int L2 = max(t.l, t.h); int H2 = min(t.l, t.h); if(num!=t.num) return num<t.num;//過載操作符 else { if(L1!=L2) return L1<L2; else return H1<H2; } } bool operator == (Node t) const//過載等於號 { int L1 = max(l, h); int H1 = min(l, h); int L2 = max(t.l, t.h); int H2 = min(t.l, t.h); return L1 == L2 && H1==H2; } }a[1005];*/ struct Node{ int num; int l; int h; bool operator == (Node t) const { return h==t.h&&l==t.l; } }a[1005]; int cmp(const void *a,const void *b) { Node *x=(Node *)a,*y=(Node *)b; if(x->num!=y->num) { return x->num-y->num; } else { if(x->l!=y->l) return x->l-y->l; else return x->h-y->h; } } int main() { int T; int i; scanf("%d",&T); while(T--) { int m; scanf("%d",&m); for(i=0;i<m;i++) { scanf("%d%d%d",&a[i].num,&a[i].l,&a[i].h); if (a[i].l < a[i].h) { swap(a[i].l, a[i].h); } } //sort(a,a+m); qsort(a,m,sizeof(a[0]),cmp); m=unique(a,a+m)-a;//unique()需要的引數必須是指標 返回的也是指標. for(i=0;i<m;i++) printf("%d %d %d\n",a[i].num,a[i].l,a[i].h); } return 0; }