是否有任何具有STL函数的库,如std::sort()
,std::binary_search()
,std::lower_bound()
,std::upper_bound()
接受3路比较谓词(返回-1 on less,0 on on等于,1对伟大的)而不是较少的谓词(真实的较少,假的相等或伟大)?
当然,较少的谓词可以很容易地从现有的3向谓词(如[](A a, B b) { return compare3(a,b)<0; }
)中得出,但这会导致对谓词的额外调用次数。
答案 0 :(得分:4)
如果你看看上面算法的实现,你会发现lower / upper_bound根本不做三向分支,binary_search只在最后一次迭代中检查相等性和sort()我不知道不知道,但我几乎可以肯定它也不会做3路分支。因此,您的“优化”不会给您任何提升。反之亦然,你的比较会更慢。