結構體並列儲存資料方便排序

2021-09-26 11:37:02 字數 893 閱讀 3961

今天做題遇到了這樣一種情況:

每個人有初始資料a,b

當排序的時候,我們依照a進行排序,但是b的順序也要跟著a的順序改變,這時應該怎麼做?

參考題目:

該題中不僅要按照每個人的時間公升序排序,還要輸出每個人原來的序號,因此,一般的想法是建立乙個結構來儲存資料,然後利用sort排序,**如下:

#include #include #include using namespace std;

struct man

;bool cmp(man &a, man &b)

int main()

sort(vec.begin(), vec.end(),cmp);

int i = 0;

for (int i = 0; i < n; i++) }

for (int i = 0; i < n; i++)

printf("\n%.2lf",sum/n);

return 0;

}

其中注意sort函式的前兩個引數是指標,而對於vector的指標就是迭代器。

然後我從題解中看到了不用建立結構的一種聰明的寫法:

因為題目中排隊的人的個數<=1000,所以他將資料這樣處理:

假設乙個人是第x個,時間為t,則令a=1001*t+x(1001實際上可以用任何大於1000的數字代替)

這樣可以保證排序的時候序號不干擾排序

又可以方便輸出序號(只需mod1001輸出序號,/1001 輸出時間)

這樣把每個人的a進行排序,那麼再依次輸出序號和求時間得到答案

最後貌似標準模板類裡面還有個std::pair,專門用來並列儲存兩個資料(相當於乙個只有兩個資料的struct?)詳情可參考:std::pair - cppreference.com

結構體儲存

struct a sizeof struct a struct b sizeof struct b struct c sizeof struct c 和老師交流時,老師給我出了幾道c c 細節方面的問題,其中遇到了一道關於結構體在記憶體儲存的問題,老師先後變換了這幾種種情況,最後一種情況還是沒有回答...

商人的訣竅(結構體儲存排序

商人的訣竅 time limit 1000ms memory limit 65536kb submit statistic problem description 第一行包括兩個非負整數n,m 分別代表e star帶的金幣數,von盛蘋果的倉庫數量,不超過50 接下來有有m行,每行包括兩個數非負整數...

結構體及結構體排序

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