[問題] std::sort()傳compare函式的問題

看板C_and_CPP (C/C++)作者時間16年前 (2009/03/13 23:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
之前說的C/C++系列文裡提到std::sort比qsort快上數倍的原因 是因為前者用template將cmp函式在compile time時展開 相較於qsort傳一個function pointer間接呼叫來的快 但是去看了一下std::sort()的prototype 大概是像這樣 template<typename _RandomAccessIterator, typename _Compare> inline void sort( _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp ) 看到這邊就有個疑問了 如果說今天是這樣呼叫 inline bool cmp(int a, int b) {return a > b;} std::vector<int> V ; // push back ints to V std::sort(V.begin(), V.end(), cmp) ; 這樣子的效果感覺上還是等同於傳function pointer嗎?? (疑問一) 如果疑問一答案是True, 那是否以下的作法才是真正有快到?(疑問二) struct Cmp { bool operator()(int a, int b){a > b ;} } cmp ; std::sort(V.begin(), V.end(), cmp) ; 這樣子cmp.operator()應該就會被展開在std::sort了 但是好像還是會牽扯Cmp這個function object的copy? 有辦法可以避免掉此copy的overhead嗎? 煩請各位高手指點 ^_^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.105.53 ※ 編輯: elefant 來自: 203.70.105.53 (03/13 23:59)
文章代碼(AID): #19kd_-Od (C_and_CPP)
文章代碼(AID): #19kd_-Od (C_and_CPP)