通常,STL 是为速度而构建的。但是,map 和 set 数据结构上只有 upper_bound 和 lower_bound,没有操作来检索最大 key 小于输入 key 的条目k
。为什么是这样?我知道我可以简单地执行 anlower_bound
并执行 a--it
来检索它,但是根据数据结构,立即搜索正确的条目而不是搜索另一个然后返回一步可能更有效。
例如,std::map
使用红黑树,即二叉搜索树。如果返回的upper_bound
元素是大于根的最小元素,则--it
必须走回根,查询 O(log n) 额外成本。
如果这是 Java,我会接受设计决策。但是,STL 是为实现最高速度而构建的,那么为什么忽略此操作呢?
澄清:我不是在谈论std::upper_bound
哪个可以采用另一个比较器,而是std::map
and的方法std::set
。