Re: overload operator < 來排序

看板Programming作者 ((short)(-15074))時間15年前 (2009/04/03 12:19), 編輯推噓6(603)
留言9則, 3人參與, 最新討論串8/9 (看更多)
※ 引述《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
才想說有可能設function pointer 完成
04/03 14:41, 4F

04/03 15:14, , 5F
你要傳什麼? functor 有額外資料就行了
04/03 15:14, 5F

04/04 01:59, , 6F
把你的 "外部資訊" 放在 object 的定義裡
04/04 01:59, 6F

04/04 02:00, , 7F
這樣不就行了? 還是你想做一個 comparator
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
文章代碼(AID): #19rOvioy (Programming)
討論串 (同標題文章)
文章代碼(AID): #19rOvioy (Programming)