2018-2-5
upper_bound 和lower_bound是STL中二分查找的函数,所以效率会比较高。
首先,最形象的一句话: upper_bound(i) 返回的是键值为i的元素可以插入的最后一个位置(上界),这里的上界就是说已经是最大的了。 lowe_bound(i) 返回的是键值为i的元素可以插入的第一个位置(下界),这里的下界就是说已经是最小的了。
怎么理解呢,举例: 在升序的set里面 (1)set里没有元素i的时候,两个元素的返回值是一样的,都是那个元素可以插入的位置: 1 2 4 5 这个序列,upp(3)和low(3)都返回位置2(下标)
(2)如果只有一个元素i,low返回那个元素的位置,而upp返回那个元素的位置的后一个位置: 1 2 4 5 这个序列upp(2)返回下标2而low(2)返回下标1
(3)多个元素i,low返回那个元素第一次出现的位置,upp返回那多个元素中的最后一个的后一个位置: 1 2 2 4 5 这个序列 upp(2)返回下标3的位置,low(2)返回下标1的位置
特别注意:举例在一个升序的容器里,如果所有元素都大于i则,upp和low都返回begin。都小于i则返回end(越界了)。
最后再来一句,看是否好理解一些。
terator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值<=key的最后一个元素的后一个元素。 降序排列的容器: iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值<= key的第一个元素。 iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值>=key的最后一个元素的后一个元素。