結構體排序與sort STL 的結合

2021-08-17 10:46:08 字數 2137 閱讀 3427

題目如下:

description

自從電子競技在中國被認定為第99個正式體育專案,教主就投身其中,cs(counter strike 反恐精英)是他拿手的一款遊戲,有很多職業選手為之付出。

反恐精英中有各種不同的槍械,我們為了簡化問題,規定每種槍有自己的名字、殺傷力、**。

下面要求你按照如下規定給已知的槍枝排序:

要求按照槍枝的攻擊力排序(由大到小),如果某些槍的攻擊力相同則對這些槍按照**排序(由小到大),如果某些槍的**相同則對這些槍按照名字的字典序排列。(本題中若字串a,b滿足 strcmp(a, b) < 0 即滿足字典序)

input

本題只有一組測試資料

第一行:n (1 <= n <= 100000) 表示有n種槍

第1..1 + n行:首先是槍枝的名字(只包括大寫字母、數字,最長佔10個字元),接著是兩個數字a (0 <= a <= 1000) b (0 <= b <= 1000) a代表殺傷力,b代表**

output

排序後,每行輸出一種槍的名字

sample input

7ak47 500 200

awp 1000 500

usp 50 20

m4a1 500 300

mp5 200 100

*** 200 100

mp4 200 100

sample output

awpak47

m4a1

***mp4

mp5usp

思路:c++中可以定義結構體,而我們只需要對結構體進行排序就可以了。

我們都知道在c++中有stl有個排序函式:

sort(),其模板為:

sort(start,end,排序方法);

而我們只需要重寫排序方法就ok了,

因此我們需要定義乙個bool型的函式(int型也可以,在c/c++中,0為flase,1為true)。

根據排序規則,乙個元素按照由大到小,乙個元素按照有小到大,另乙個按字典序排列,因此

cmp函式可如下定義:

bool cmp (const

gun &s1,const

gun &s2)

if(s1.b!=s2.b)

return s1.b>s2.b;

if(s1.m!=s2.m)

return s1.m

m;char *w=(char *)s1.a;

char *e=(char *)s2.a;

if (strcmp(w,e)<0)

return

1;else

return

0;附上ac**:

#include

#include

#include

#include

#include

usingnamespace

std;

structgun {

char a[15];

int b;

int m;

bool cmp (const

gun &s1,const

gun &s2)

if(s1.b!=s2.b)

return s1.b>s2.b;

if(s1.m!=s2.m)

return s1.m

m;char *w=(char *)s1.a;

char *e=(char *)s2.a;

if (strcmp(w,e)<0)

return

1;else

return

0;int main()

int n;

while(~scanf("%d",&n))

gun q[n];

for(int i=0;i//cin>>q[i].a>>q[i].b>>q[i].m;

scanf("%s",q[i].a);

scanf("%d%d",&q[i].b,&q[i].m);

sort(q,q+n,cmp);

for(int i=0;i//coutprintf("%s\n",q[i].a);

return0;

本題還有個坑.....就是測試資料量很大,如果你用cin,cout會超時。。。。(別問我怎麼知道的)。。。。。

結構體及結構體排序

1 定義的方法struct node 用strut定義乙個結構體,node是結構體的名字,可以自己瞎取。p 1000 這樣你就定義了乙個神奇的陣列!沒錯,它就是node型陣列!上面的 還在結構體的末尾定義了乙個該型的陣列,其實這個陣列不一定要有,而且也可以在主函式中定義,但是感覺上用的比較多,而且這...

結構體的排序

對於排序的方法,我們知道很多種。但實際應用中,最麻煩的不是排序本身,因為幾乎所有語言都提供了排序的函式。而麻煩的是不經需要排序,還需要把一些附帶的資料的位置也跟著重新排列。比如我們有很多學生的資料。每個學生是乙個物件,然後這些物件按一定順序放在乙個陣列裡面。我們一會兒想按照學生成績來排列這些物件,一...

結構體排序

description excel可以對一組紀錄按任意指定列排序。現請你編寫程式實現類似功能。input 測試輸入包含若干測試用例。每個測試用例的第1行包含兩個整數 n 100000 和 c,其中 n 是紀錄的條數,c 是指定排序的列號。以下有 n 行,每行包含一條學生紀錄。每條學生紀錄由學號 6位...