容器搜索算法:lower_bound, uper_bound
来源:互联网 发布:mysql主键可以重复吗 编辑:程序博客网 时间:2024/06/06 17:35
本文主要是验证,容器搜索算法的使用:lower_bound, uper_bound
C++ STL
iterator lower_bound( const key_type &key );
iterator upper_bound( const key_type &key );
2函数作用
iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。
iterator upper_bound( const key_type &key ):返回一个迭代器,指向键值> key的第一个元素。
3举例
例如:map中已经插入了1,2,3,4的话,如果lower_bound(2)的话,返回的2,而upper_bound(2)的话,返回的就是3
验证项目:
1. 当 key > begin时 lower_bound, uper_bound取值
2. 当 key < end 时 lower_bound, uper_boudn取值
3. 当 key =容器中的某值(不等于bigin,也不等于end)时 lower_bound, uper_boudn 取值
4. 当 key在不等于容器中任何一Key,但是在key的返回 ower_bound, uper_boudn取值
5. 当 key等于 bigin,当 key等于 end时的取值
测试代码:
[cpp]
#include "stdafx.h"
#include <map>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//lower_bound函数用法,这个函数用来返回要查找关键字的下界
//upper_bound函数用法,这个函数用来返回要查找关键字的上界
map<int,string>mp;
mp[3]="3";
mp[4]="4";
mp[7]="7";
mp[8]="8";
map<int,string>::iterator iterLowerBound5,iterUperBound5;
map<int,string>::iterator iterLowerBound7,iterUperBound7;
map<int,string>::iterator iterLowerBound3,iterUperBound3;
map<int,string>::iterator iterLowerBound8,iterUperBound8;
map<int,string>::iterator iterLowerBound10,iterUperBound10;
map<int,string>::iterator iterLowerBound1,iterUperBound1;
iterLowerBound5 = mp.lower_bound(5);
iterUperBound5 = mp.upper_bound(5);
iterLowerBound7 = mp.lower_bound(7);
iterUperBound7 = mp.upper_bound(7);
iterLowerBound3 = mp.lower_bound(0);
iterUperBound3 = mp.upper_bound(0);
iterLowerBound8 = mp.lower_bound(8);
iterUperBound8 = mp.upper_bound(8);
iterLowerBound10 = mp.lower_bound(10);
iterUperBound10 = mp.upper_bound(10);
if(iterLowerBound10 == mp.end())
cout << "iterUperBound10 = end" << endl;
if(iterUperBound10 == mp.end())
cout << "iterUperBound10 = end" << endl;
iterLowerBound1 = mp.lower_bound(1);
iterUperBound1 = mp.upper_bound(1);
if(iterLowerBound1 == mp.end())
cout << "iterUperBound1 = end" << endl;
if(iterUperBound1 == mp.end())
cout << "iterUperBound1 = end" << endl;
if(iterLowerBound1 == mp.begin())
cout << "iterUperBound1 = begin" << endl;
if(iterUperBound1 == mp.begin())
cout << "iterUperBound1 = begin" << endl;
//iter2 = mp.upper_bound(5);
string Str = iterLowerBound5->second;
cout<<"lower_bound(5) = " <<Str.c_str()<<endl;
Str = iterUperBound5->second;
cout<<"upper_bound(5) = " <<Str.c_str()<<endl;
Str = iterLowerBound7->second;
cout<<"lower_bound(7) = " << Str.c_str()<<endl;
Str = iterUperBound7->second;
cout<<"upper_bound(7) = " << Str.c_str()<<endl;
Str = iterLowerBound3->second;
cout<<"lower_bound(0) = " << Str.c_str()<<endl;
Str = iterUperBound3->second;
cout<<"upper_bound(0) = " << Str.c_str()<<endl;
Str = iterLowerBound8->second;
cout<<"lower_bound(8) = " << Str.c_str()<<endl;
//Str = iterUperBound8->second;
if(iterUperBound8 == mp.end())
cout<<"upper_bound(8) == end" << Str.c_str()<<endl;
while(1);
return 0;
}
打印输出:
iterLowerBound10 = end
iterUperBound10 = end
iterLowerBound1 = begin
iterUperBound1 = begin
lower_bound(5) = 7
lower_bound(5) = 7
lower_bound(7) = 7
lower_bound(7) = 8
lower_bound(0) = 3
lower_bound(0) = 3
lower_bound(8) = 8
lower_bound(8) = end8
结论:
当参数 key没有在容器 key的范围内:
1. 小于容器key uper_bound, lower_bound都将返回 begin.
2. 大于容器key uper_bound, lower_bound都将返回 end
当参数key在容器key范围内:
1. 参数 key ==容器key. lower_bound将返回当前key的iterator, uper_bound将返回下一个元素的iterator.
2. 参数 key不等于容器key,且在范围内, lower_bound将返回比参数key大的且相邻的容器key的iterator
3 如果 Key等于 begin或等于 end,将返回begin或end
- 容器搜索算法:lower_bound, uper_bound
- c++学习——容器搜索方法(lower_bound, uper_bound)
- c++学习——容器搜索方法(lower_bound, uper_bound)
- 二分搜索:lower_bound, upper_bound
- lower_bound(二分搜索)
- 容器搜索算法的选择
- lower_bound 算法
- lower_bound和upper_bound算法
- lower_bound和upper_bound算法
- 138_二分搜索 (lower_bound)
- 实现lower_bound和upper_bound算法
- STL----lower_bound和upper_bound算法
- STL_____ upper_bound()与lower_bound()算法
- upper_bound,lower_bound,eaual_bound,equal_range二分搜索
- lower_bound
- lower_bound
- lower_bound
- lower_bound(),
- JDBC学习第三站之使用 Transaction 编程
- jar包记录
- Android 压缩网络上的图片BitmapFactory.decodeStream()返回为空的问题
- 日期插件My97DatePicker
- Fragment保存状态
- 容器搜索算法:lower_bound, uper_bound
- 7.23 继续HTML内容及XHTML、CSS的学习
- [Drools]JAVA规则引擎 -- Drools
- ARM7启动代码,文字池
- UVa 1419 Ugly Windows 解题报告(水题)
- epoll小结
- jQuery Ajax 实例 全解析
- oracle 一些基本操作语句
- map容器的用法