Re: STL sort

看板Programming作者 ((short)(-15074))時間15年前 (2009/08/03 20:05), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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

08/04 06:25, , 1F
非常感謝
08/04 06:25, 1F

08/04 06:26, , 2F
我後來也是包成struct排 但要兩倍空間
08/04 06:26, 2F

08/04 21:37, , 3F
餵.. 為什麼要兩倍空間... @@
08/04 21:37, 3F

08/07 04:36, , 4F
因為原本的array還是得在阿
08/07 04:36, 4F
文章代碼(AID): #1ATj9i7y (Programming)
討論串 (同標題文章)
本文引述了以下文章的的內容:
0
5
完整討論串 (本文為第 3 之 3 篇):
0
5
文章代碼(AID): #1ATj9i7y (Programming)