作者elefant ()
看板C_and_CPP
标题[问题] std::sort()传compare函式的问题
时间Fri Mar 13 23:47:08 2009
之前说的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)