也许我误解了 lower bound
的技术定义,但我希望如果我有一个集合 a = { 0, 3, 4 }
并计算 a.lower_bound(2)
结果将为 0
。 IE。我希望 std::set::lower_bound
接近 infimum 的数学概念
然而标准库将其定义为不小于(有效 >=
)x 的最大数。
这背后的原因是什么?
最佳答案
“[lower|upper]_bound
”函数旨在返回集合中的一个位置,您可以在其中插入一个不会违反集合顺序的键。因为 STL 集合的迭代器指向下一个元素之前,如果 lower_bound(2)
将迭代器返回到 0
,则插入 2
将违反了你的集合顺序,它现在是 {2, 0, 3, 4}
。上限用于显示在不违反设置顺序的情况下您可以插入的最后位置。
如果您的集合可能有重复的键条目,这将非常有用。考虑 {0, 3, 3, 4}
。 lower_bound(3)
会返回一个迭代器到这里:{0, *, 3, 3, 4}
,而 upper_bound(3)
会在此处返回:{0, 3, 3, *, 4}
。
关于c++ - 为什么 std::set::lower_bound(x) (有效地)定义为最小数 >= x 而不是最大数 <= x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229934/