[問題] std::sort()傳compare函式的問題
之前說的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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章