看板 Programming 關於我們 聯絡資訊
※ 引述《sorryChen (陳揚和)》之銘言: : 如果我有兩個分開的array 紀錄 ex: 人名和對應的score : ex: : int name[3] = {"a", "b", "c"}; : int score[3] = {3, 2, 1} : 現在想用stl sort成 依照score來排序 : 這樣要怎麼用? 要寫個自己的swap 然後怎麼丟到sort中呢? : → shik:可以再開一個陣列存編號 124.8.3.192 08/01 22:15 這個解法應該算很接近你的需求了 例如: char name[4][10] = {"Jessica","George","Battler","Maria"};//最近剛跑完海貓..XD int score[4] = {70,100,60,80}; bool compare(const int a, const int b) { return score[a]<score[b]; } //in some function int ptr[4]; for(int i=0; i<4; i++) ptr[i]=i; sort(ptr,ptr+4,compare); for(int i=0; i<4; i++) { cout << name[ptr[i]] << '\t' << score[ptr[i]] << endl; } 如果資料不在 global 時也可以寫 functor: struct compare { int *score; compare(int *s):score(s) {} bool operator () (const int a, const int b) const { return score[a]<score[b]; } }; //in some function char name[4][10] = {"Jessica","George","Battler","Maria"}; int score[4] = {70,100,60,80}; int ptr[4]; for(int i=0; i<4; i++) ptr[i]=i; sort(ptr,ptr+4,compare(score)); for(int i=0; i<4; i++) { cout << name[ptr[i]] << '\t' << score[ptr[i]] << endl; } 不過個人還是會習慣把要一起排的資料包成 struct 一來結構上就是在一起 二來直接丟給sort就會真的排好 -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.250.80
sorryChen:非常感謝 207.151.231.16 08/04 06:25
sorryChen:我後來也是包成struct排 但要兩倍空間 207.151.231.16 08/04 06:26
yoco315:餵.. 為什麼要兩倍空間... @@118.160.112.214 08/04 21:37
sorryChen:因為原本的array還是得在阿 128.125.87.33 08/07 04:36