stl中upper_bound和lower_bound的区别

新手上路,请多包涵

我正在查看这些页面上的 upper_bound 和 lower_bound 算法如何在 stl 中工作: lower_boundupper_bound ,并且在这些页面上以相同的方式记录: lower_boundupper_bound

查看链接中的代码,他们似乎对我做了完全相同的事情,只有以下几行不同(查看前 2 个链接中的代码):

下限(第 10 行):

 if (*it<val) {                 // or: if (comp(*it,val)), for version (2)

上限(第 10 行):

  if (!(val<*it))                // or: if (!comp(val,*it)), for version (2)

但是肯定颠倒比较的元素,然后将它们与 false 进行比较是双重否定的,因此它们会做完全相同的事情吗?

实际上是否存在我没有看到的差异,这是网站文档中的错误吗?如果是后者,正确的方法是什么?

原文由 xEric_xD 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 376
1 个回答
value a a a b b b c c c
index 0 1 2 3 4 5 6 7 8
bound       l     u

Where l represents the lower bound of b , and u represents the upper bound of b .

因此,如果相对于所使用的比较存在“相等”的值范围, lower_bound 给你第一个, upper_bound 给你一个过去的结果这些。这是 STL 范围的正常模式 [first, last)

原文由 BoBTFish 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题