5

是否有任何具有 STL 函数的库,如std::sort(), std::binary_search(), std::lower_bound()std::upper_bound()接受 3 路比较谓词(在较少时返回 -1,在相等时返回 0,在大时返回 1)而不是较少谓词(在较少时为真,在相等或大时为假)?

当然,less 谓词可以很容易地从现有的 3 向谓词(如[](A a, B b) { return compare3(a,b)<0; })中提取出来,但这会导致对谓词的调用次数增加。

4

1 回答 1

4

如果你看一下上述算法的实现,你会发现 lower/upper_bound 根本不做 3 路分支,binary_search 只在最后一次迭代中检查相等性和关于 sort() 我不知道但我几乎可以肯定它也不会做 3 路分支。所以你的“优化”不会给你任何提升。反之亦然,你的比较会更慢。

于 2011-05-22T06:48:46.697 回答