【发布时间】:2013-03-03 18:30:59
【问题描述】:
通常,STL 是为速度而构建的。但是,map 和 set 数据结构上只有 upper_bound 和 lower_bound,没有操作来检索小于输入键 k 的最大键的条目。为什么是这样?我知道我可以简单地做一个lower_bound 并做一个--it 来检索它,但是根据数据结构,立即搜索正确的条目而不是搜索另一个然后返回一个可能更有效一步。
例如,std::map 使用红黑树,即二叉搜索树。如果upper_bound返回的元素是大于根的最小元素,那么--it必须走回根,查询O(log n)额外开销。
如果这是 Java,我会接受设计决策。然而,STL 是为最高速度而构建的,那么为什么忽略了这个操作呢?
说明:
我说的不是std::upper_bound 可以采用另一个比较器,而是std::map 和std::set 的方法。
【问题讨论】:
-
你的意思是“简单地做一个
lower_bound然后做一个--it”? -
@JonathanWakely:我知道这一点。我在第二句话中写了这个。请正确阅读问题:)
-
咳咳,请自行阅读。我读了,谢谢。你写了
upper_bound,我问你的意思是lower_bound(这是第四句而不是第二句) -
@JonathanWakely:大声笑,真的,我没有正确阅读您的评论。对不起,对不起 :)
标签: c++ stl binary-search-tree