c++ - 为什么 std::set::lower_bound(x) (有效地)定义为最小数 >= x 而不是最大数 <= x?

标签 c++ stl set

也许我误解了 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/

相关文章:

c++ - 如果从不调用任何非常量方法,丢弃 const 是否安全

java - 是否可以将 Set 转换为 List?

c++ - Geometry Shader中Shader Storage Buffer的所有值都是0

c++ - 依赖于 Alpha 的模板匹配

c++ - size of datatype 和 sizeof(data type) 的区别

c++ - std::make_shared 构造函数中的参数个数

C++。如何使用 sregex_token_iterator 检测匹配和不匹配的部分?

javascript - 在 Javascript 中使用 Set 删除重复项

algorithm - 查找可以完成元组而不重复的子集

c++ - 终端 && 非终端递归调用