今天偶然使用到了C++的set的lower_bound与upper_bound方法,觉得极其好用,记录一下。
C++的set众所周知是用红黑树实现的,所以平衡性比较好,查找速度也会比较快。
先说lower_bound
假如集合为C,我们查找的键值为key,则C.lower_bound(key)会查找第一个键值不小于key的元素的迭代器。
这里注意两点,第一是不小于,第二是返回值类型为迭代器。
比如容器(set中元素自动排序,红黑树特性)中元素有{1,3,5,8,11},key为6,则在此容器上使用lower_bound查找6的结果是8这个元素对应的迭代器,因为它是第一个不小于6的元素。而查找key为3时,则会返回元素3对应的迭代器,因为它是第一个不小于3的元素。
再说upper_bound
假如集合为C,我们查找的键值为key,则C.upper_bound(key)会查找第一个比key大的元素的迭代器。
这里注意还是两点,第一是大于,第二是返回值类型为迭代器。
比如set容器中元素有{1,3,5,8,11},key为6,则在此容器上使用upper_bound查找6的结果是8这个元素对应的迭代器,因为它是第一个大于6的元素。而查找key为5时,这里注意,它返回的仍然是8这个元素的迭代器,因为它是第一个比5大的元素,虽然元素5在集合中。
基于以上分析,lower_bound和upper_bound是有不同的,利用他们可以经过简单处理以后返回一个元素的上下界。