具有 3 路比较谓词的 STL 函数

发布于 2024-11-09 07:25:24 字数 339 浏览 0 评论 0原文

是否有任何具有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双手揣兜 2024-11-16 07:25:24

如果您查看上述算法的实现,您会发现 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文