【发布时间】:2012-06-29 02:31:11
【问题描述】:
也许我误解了lower bound 的技术定义,但我希望如果我有一个集合a = { 0, 3, 4 } 并计算a.lower_bound(2),结果将是0。 IE。我希望std::set::lower_bound 接近infimum 的数学概念
然而标准库将其定义为不小于(实际上是>=)x 的最大数。
这背后的原因是什么?
【问题讨论】:
-
考虑迭代器的范围可能更常见,因此当您说“我想要 2 到 5 之间的所有内容”时,迭代器返回是较低的“障碍”。但问题是,为什么你会期望它不是这样? /your/ 背后的原因是什么?
-
除了出色的答案之外,您还可以通过使用
std::prev(iter)if*iter != x来获得下确界。 -
Corrections — “...标准库将其定义为 最小 不少于...”@KonradRudolph 的建议很好,但首先您还需要检查
set是否不是空的。对于std::lower_bound免费功能,也可以使用reverse_iterators和std::greater来反转“错误”的方向。 -
啊,优雅的方法是从
s.lower_bound(x)的结果构造一个std::set::reverse_iterator,然后将其与s.rend()进行比较。