作者LPH66 ((short)(-15074))
看板Programming
標題Re: STL sort
時間Mon Aug 3 20:04:58 2009
※ 引述《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