lower_bound()的返回结果

zdy0378 2004-10-27 04:10:03
下面这个程序的输出结果为什么是 20,20,而不是 10,20 啊?那位高手解释一下lower_bound()和upper_bound()的意义

#include<iostream>
#include<set>
#include<algorithm>

using namespace std;

int main()
{
set<int> s1;
s1.insert(10);
s1.insert(20);
s1.insert(5);
s1.insert(39);
s1.insert(56);
s1.insert(0);

set<int>::iterator it1,it2;

it1=s1.lower_bound(18);
it2=s1.upper_bound(18);
cout<<*it1<<"\t"<<*it2<<"\t";

system("pause");
}
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smartduck 2004-10-27
  • 打赏
  • 举报
回复
好像内部实现是用2分法查找。所以,请先sort一下
template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
const _Tp& __val, _Compare __comp, _Distance*)
{
_Distance __len = distance(__first, __last);
_Distance __half;
_ForwardIter __middle;

while (__len > 0) {
__half = __len >> 1;
__middle = __first;
advance(__middle, __half);
if (__comp(*__middle, __val)) {
__first = __middle;
++__first;
__len = __len - __half - 1;
}
else
__len = __half;
}
return __first;
}
xuzheng318 2004-10-27
  • 打赏
  • 举报
回复
template<class Type1, class Type2>
struct pair
{
typedef Type1 first_type;
typedef Type2 second_type
Type1 first;
Type2 second;
pair( );
pair(
const Type1& __Val1,
const Type2& __Val2
);
template<class Other1, class Other2>
pair(
const pair<Other1, Other2>& _Right
);
};
xuzheng318 2004-10-27
  • 打赏
  • 举报
回复
建议看SGI的文档
carylin 2004-10-27
  • 打赏
  • 举报
回复
【下面这个程序的输出结果为什么是 20,20,而不是 10,20 啊?那位高手解释一下lower_bound()和upper_bound()的意义】
这两个算法调用的op是less<>仿函数。具体到此题中,语句
it1=s1.lower_bound(18);
从s1.begin()开始逐个调用less<>函数,10 < 18, 所以不是,往下,20 < 18 为假,所以返回20的位置。

lower_bound(18);返回大于等于18的第一个位置

upper_bound()返回大于18的第一个位置。
carylin 2004-10-27
  • 打赏
  • 举报
回复
这是pair类模板的接口:
template<class T, class U>
struct pair {
typedef T first_type;
typedef U second_type
T first;
U second;
pair();
pair(const T& x, const U& y);
template<class V, class W>
pair(const pair<V, W>& pr);
};
carylin 2004-10-27
  • 打赏
  • 举报
回复
pair<int, float> p(10, 20.0);
zdy0378 2004-10-27
  • 打赏
  • 举报
回复
没人回答?
另外问一下STL中的pair怎么用的。

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧