具有 3 路比较谓词的 STL 函数
是否有任何具有 STL 函数的库,例如 std::sort()
、std::binary_search()
、std::lower_bound()
、 std::upper_bound()
接受 3 路比较谓词(小于时返回 -1,相等时返回 0,伟大时返回 1)而不是 less 谓词(小于时返回 true,等于或伟大时返回 false) ?
当然,less 谓词可以很容易地从现有的三向谓词中得出(如 [](A a, B b) { return Compare3(a,b)<0; }
),但是这会导致对谓词的额外调用。
Is there any library with STL functions like std::sort()
, std::binary_search()
, std::lower_bound()
, std::upper_bound()
accepting 3-way comparison predicates (which return -1 on less, 0 on equal, 1 on great) instead of less predicate (true on less, false on equal or great) ?
Of course, the less predicate can be easily made out from existing 3-way predicate (like [](A a, B b) { return compare3(a,b)<0; }
) but this results in extra number of calls to the predicate.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您查看上述算法的实现,您会发现 lower/upper_bound 根本不执行 3 路分支,binary_search 仅在最后一次迭代中检查相等性,而关于 sort() 我不知道但我几乎可以肯定它也不会进行三路分支。所以你的“优化”不会给你带来任何提升。反之亦然,你的比较会更慢。
If you look at the implementation of the above algorithms, you'll see that lower/upper_bound don't do 3-way branches at all, binary_search does only in the last iteration to check equality and about sort() I don't know but I'm almost sure it doesn't do 3-way branches too. So your 'optimization' won't give you any boost. The opposite is true, your comparisons will be slower.