lower_bound、upper_bound、equal_range详解
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详解相关推荐
- lower_bound()和upper_bound( )函数详解
lower_bound( )和upper_bound( )都是利用二分查找的方法在一个排好序的数组中进行查找的.两个函数的用法类似,在一个左闭右开的有序区间里进行二分查找,需要查找的值由第三个参数给出 ...
- upper_bound和lower_bound的使用 详解
前提:有序 1.从小到大 lower_bound(start,last,n) :返回第一个大于等于n的地址 upper_bound(start,last,n) :返回第一个大于n的地址 2.从大到 ...
- lower_bound和upper_bound详解
lower_bound和upper_bound详解 两函数作用 可以对有序连续的空间进行二分查找. lower_bound默认查找大于等于某值所在连续空间的位置. upper_bound默认查找大于某 ...
- STL 中map的用法详解
STL 中map的用法详解 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可 ...
- STL中map和string, vector 用法详解
1. map 用法详解 std map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成 ...
- C++/C--set常见用法详解【转载】
1 概念 set是一个内部自动有序且不含重复元素的容器,其实现自动去重按升序排序.使用set,需要添加头文件:#include <set>.可以通过迭代器*it来访问set里面的元素,但是 ...
- C++中的unordered_map用法详解
1 简介 unordered_map是一个将key和value关联起来的容器,它可以高效的根据单个key值查找对应的value. key值应该是唯一的,key和value的数据类型可以不相同. uno ...
- C++ map和unordered_map详解
C++ map和unordered_map详解 官方文档链接 概述 C++中map和unordered_map提供的是一种键值对容器,在实际开发中会经常用到,它跟Python的字典很类似,所有的数 ...
- STL —— multimap的用法详解
文章目录 multimap的基本性质 STL--multimap容器的用法 multimap容器的创建与初始化 multimap容器包含的成员方法 multimap容器大小 multimap容器中键值 ...
最新文章
- [导入]使用RDLC报表(一)
- Docker核心技术 1
- 分布式锁的三种实现的对比
- Hive 0.13.1 和HBase 0.98.6.1整合
- Nginx配置X-Forwarded-Proto
- win 二进制门安装mysql_windows安装mysql2 gem(包括windows 7 64位)
- 使用VS2015进行C++开发的6个主要原因
- (并查集)小希的迷宫
- xcode6创建工程时 默认去掉了PrefixHeader.pch
- 新的博客,试试写博客看看
- 如何通过Chrome中的代码设置JavaScript断点?
- ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
- tornado + supervisor + nginx + linux 亲身体验
- 关于interface
- SmartDeblur-图片模糊处理器
- mysql置疑原因_数据库置疑的处理办法
- 微信公众号编辑有哪些实用的小工具和小技巧?
- python提取图片文字_python实现提取图片中文字
- 算法导论第十二章总结以及课后题答案
- 如何增强大脑记忆力?提高大脑记忆能力的20个方法