Re: overload operator < 來排序
※ 引述《adrianshum (Alien)》之銘言:
: ※ 引述《sorryChen (陳揚和)》之銘言:
: : 感謝學長詳細的解答
: : 但我其實想用現成的sort..
: : 現成的sort好像需要pass-in comparison function. 而且我希望這個comparison
: : function 可以輕易抽換 且是根據外部的資訊輕易抽換..
: : 比如說我有個array存有每個人的名子,
: : 然後一個object存有每個人的數學成績 另一個object有國文成績 ....etc
: : 我想要有個comparison的function pointer
: : 指到數學成績這個object的member function 比較兩個人的數學成績 for example
: : 然後也可以指到國文成績這個object..如果要排國文的話...
: : 我不知道要怎麼寫才能利用外部的資料+comparison function
: : 和現成的sort..而我覺得這一定有人寫過相同的問題...
: : 如果用一個interface 要怎麼用呢..
: 我沒記錯的話, 現有 Std lib 裡有不少都已
: 經有提供你所說的 'comparison function',
: 用來讓沒有提供 < operator 的東西能依一個
: 外來傳入的 less function 來作比較 (及 sort)
: 可以去看看 map 怎樣做法. 通常很多情況下都
: 不是真的餵 function pointer, 而是餵 functor
struct object //其實用 class 也不會怎樣 自己控管好 accessibility 就好
{
int x,y,z;
};
bool compare1(const object &a, const object &b)
{
return a.x>b.x;
}
bool compare2(const object &a, const object &b)
{
return a.y<b.y;
}
class compare3 //這是一個functor!
{
public:
bool operator () (const object &a, const object &b)
{
if(a.z==b.z)
{
if(a.y==b.y)
{
return a.x<b.x;
}
else
{
return a.y<b.y;
}
}
else
{
return a.z<b.z;
}
}
};
.....
object data[100];
....
sort(data,data+100,compare1); //把data對x由大排到小
sort(data,data+100,compare2); //把data對y由小排到大
sort(data,data+100,compare3()); //先對z, 一樣再對y, 再一樣對x 都是由小排到大
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █▄▄▄▄▄
▍./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏ζ(▏●‵◥′●▊)Ψ ▏ █ ⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主義 █▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界を大いに盛り上げるための涼宮ハルヒの団
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.84
推
04/03 14:30, , 1F
04/03 14:30, 1F
推
04/03 14:38, , 2F
04/03 14:38, 2F
→
04/03 14:40, , 3F
04/03 14:40, 3F
→
04/03 14:41, , 4F
04/03 14:41, 4F
→
04/03 15:14, , 5F
04/03 15:14, 5F
推
04/04 01:59, , 6F
04/04 01:59, 6F
推
04/04 02:00, , 7F
04/04 02:00, 7F
推
04/04 02:00, , 8F
04/04 02:00, 8F
推
04/04 04:18, , 9F
04/04 04:18, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 9 篇):