lower_bound、upper_bound、equal_range定义在头文件<algorithm>中
同时,有序容器如set,map也会提供成员函数lower_bound、
函数声明如下:

ForwardIterator lower_bound(ForwardIterator beg,FowardIterator end,const T&value);
ForwardIterator lower_bound(ForwardIterator beg,FowardIterator end,const T&value,BinaryPredicate op);
ForwardIterator upper_bound(ForwardIterator beg,FowardIterator end,const T&value);
ForwardIterator upper_bound(ForwardIterator beg,FowardIterator end,const T&value,BinaryPredicate op);
pair<ForwardIterator,ForwardIterator> equal_range(ForwardIterator beg,FowardIterator end,const T&value);
pair<ForwardIterator,ForwardIterator> equal_range(ForwardIterator beg,FowardIterator end,const T&value,BinaryPredicate op);

lower_bound()返回第一个大于等于value的元素位置,若无,则返回end。
lower_bound()返回第一个大于value的元素位置,若无,则返回end。
op是可选的排序准则,即op(elem1,elem2);
pair为定义于C++<utility>中的结构体,作用是将两个value视作一个单元。里面的数据成员为first和second。
equal_range()与make_pair(lower_bound(…),upper_bound(…))等效。其中make_pair以lower_bound和upper_bound为参数,返回一个pair结构体。
下面展示lower_bound和upper_bound的使用:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
template<typename T>
void printstl(T a)
{for (auto& elem : a){cout << elem << " ";}cout << endl;
}int main()
{//freopen("input.txt", "r", stdin);vector<int>coll;for (int i = 0; i < 9; ++i){coll.push_back(i + 1);coll.push_back(i + 1);}printstl(coll);auto pos1 = lower_bound(coll.begin(), coll.end(), 5);auto pos2 = upper_bound(coll.begin(), coll.end(), 5);//distance(it1,it2)计算两个迭代器间的距离,比如,distance(coll.begin(),coll.end())则等于coll元素的个数。cout << "5 could get position " << distance(coll.begin(), pos1) + 1 << " up to " << distance(coll.begin(), pos2) + 1<< " without breaking the sorting" << endl;coll.insert(lower_bound(coll.begin(), coll.end(), 3), 3);//不打乱顺序地插入3coll.insert(upper_bound(coll.begin(), coll.end(), 7), 7);//不打乱顺序地插入7printstl(coll);}

输出如下:

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
5 could get position 9 up to 11 without breaking the sorting
1 1 2 2 3 3 3 4 4 5 5 6 6 7 7 7 8 8 9 9

lower_bound、upper_bound、equal_range也有对应的成员函数。成员函数的实现通常比通用算法快。

#include<set>
#include<iostream>
using namespace std;
int main()
{//freopen("input.txt", "r", stdin);set<int>c;c.insert(1);c.insert(2);c.insert(4);c.insert(5);c.insert(6);cout << "lower_bound(3): " << *c.lower_bound(3) << endl;cout << "upper_bound(3): " << *c.upper_bound(3) << endl;cout << "equal_range(3): " << *c.equal_range(3).first << " " << *c.equal_range(3).second << endl;cout << endl;cout << "lower_bound(5): " << *c.lower_bound(5) << endl;cout << "upper_bound(5): " << *c.upper_bound(5) << endl;cout << "equal_range(5): " << *c.equal_range(5).first << " " << *c.equal_range(5).second << endl;cout << endl;if (c.lower_bound(8) == c.end())cout << "lower_bound(8) not found. Return c.end()" << endl;if (c.upper_bound(8) == c.end())cout << "upper_bound(8) not found. Return c.end()" << endl;if (c.equal_range(8).first == c.end()){cout << "equal_range(8) not found. Return c.end()" << endl;}cout << endl;
}

输出结果如下:

lower_bound(3): 4
upper_bound(3): 4
equal_range(3): 4 4lower_bound(5): 5
upper_bound(5): 6
equal_range(5): 5 6lower_bound(8) not found. Return c.end()
upper_bound(8) not found. Return c.end()
equal_range(8) not found. Return c.end()

lower_bound、upper_bound、equal_range详解相关推荐

  1. lower_bound()和upper_bound( )函数详解

    lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的.两个函数的用法类似,在一个左闭右开的有序区间里进行二分查找,需要查找的值由第三个参数给出 ...

  2. upper_bound和lower_bound的使用 详解

    前提:有序 1.从小到大 lower_bound(start,last,n)  :返回第一个大于等于n的地址 upper_bound(start,last,n)  :返回第一个大于n的地址 2.从大到 ...

  3. lower_bound和upper_bound详解

    lower_bound和upper_bound详解 两函数作用 可以对有序连续的空间进行二分查找. lower_bound默认查找大于等于某值所在连续空间的位置. upper_bound默认查找大于某 ...

  4. STL 中map的用法详解

    STL 中map的用法详解 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可 ...

  5. STL中map和string, vector 用法详解

    1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...

  6. C++/C--set常见用法详解【转载】

    1 概念 set是一个内部自动有序且不含重复元素的容器,其实现自动去重按升序排序.使用set,需要添加头文件:#include <set>.可以通过迭代器*it来访问set里面的元素,但是 ...

  7. C++中的unordered_map用法详解

    1 简介 unordered_map是一个将key和value关联起来的容器,它可以高效的根据单个key值查找对应的value. key值应该是唯一的,key和value的数据类型可以不相同. uno ...

  8. C++ map和unordered_map详解

    C++ map和unordered_map详解 官方文档链接 概述   C++中map和unordered_map提供的是一种键值对容器,在实际开发中会经常用到,它跟Python的字典很类似,所有的数 ...

  9. STL —— multimap的用法详解

    文章目录 multimap的基本性质 STL--multimap容器的用法 multimap容器的创建与初始化 multimap容器包含的成员方法 multimap容器大小 multimap容器中键值 ...

最新文章

  1. [导入]使用RDLC报表(一)
  2. Docker核心技术 1
  3. 分布式锁的三种实现的对比
  4. Hive 0.13.1 和HBase 0.98.6.1整合
  5. Nginx配置X-Forwarded-Proto
  6. win 二进制门安装mysql_windows安装mysql2 gem(包括windows 7 64位)
  7. 使用VS2015进行C++开发的6个主要原因
  8. (并查集)小希的迷宫
  9. xcode6创建工程时 默认去掉了PrefixHeader.pch
  10. 新的博客,试试写博客看看
  11. 如何通过Chrome中的代码设置JavaScript断点?
  12. ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
  13. tornado + supervisor + nginx + linux 亲身体验
  14. 关于interface
  15. SmartDeblur-图片模糊处理器
  16. mysql置疑原因_数据库置疑的处理办法
  17. 微信公众号编辑有哪些实用的小工具和小技巧?
  18. python提取图片文字_python实现提取图片中文字
  19. 算法导论第十二章总结以及课后题答案
  20. 如何增强大脑记忆力?提高大脑记忆能力的20个方法

热门文章

  1. 企业如何提高客户转化率、复购率?用快鲸scrm效果突出
  2. hans wouters_Hans教学丨十大进阶长板平花招式
  3. 青春不是用来抱怨,而是用来奋斗的
  4. 为什么需要工作流调度系统?
  5. VS2008下编写Colors应用程序
  6. python多任务,线程详解
  7. ionic platform add android环境搭建之难产【i1】【小白-2016.11.5】
  8. LYZ-Ice Skates
  9. 数据结构第四章字符串MOOC整理
  10. 【POJ 3311】Hie with the Pie(状压DP)