c++ STL map容器中的lower_bound函数的一个灵异现象
疑问:众所周知,map中3的下界是2(如果这个map没有3的话),如下述代码所示,某个map有2没有3,lower_bound(2)返回的迭代器可以取用second,但是...
疑问:众所周知,map中3的下界是2(如果这个map没有3的话),如下述代码所示,某个map有2没有3,lower_bound(2)返回的迭代器可以取用second,但是lower_bound(3)的迭代器却不能取用second(如图所示,这种情况下取用second的话会宕机),怎么会这样呢?(当然,这两种情况的迭代器都可以取用first)
展开
3个回答
展开全部
lower_bound(x)不是下界,而是大于等于x的最小值(upper_bound是大于x的最小值),大概试一下可以发现lower_bound(3)返回的是S.end()
追问
牛啊!高人高人 是在了不起!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
m.lower_bound(键) 返回值指的是某个键的迭代器(若该键不存在,则返回挨着这个键的下一个键的迭代器), m.upperbound(键)的返回值是这个键(无论该键是否存在)都返回挨着这个键的下一个键的迭代器
在map里面 m.lower_bound(键) 就是大于或等于键值的第一个迭代器, m.lower_bound(键) 是大于键值的下一个迭代器。
比方说
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于有键3,所以的他值就是键3 的迭代器
m.lower_bound(3) 无论有没有键3,他都是键4的迭代器
再比如
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于没有键3,所以的他值就是键4 的迭代器
----------------------------------------------分割线--------------------------------
若是在multimap中
由于multimap的键值是可以重复的,同一个键对应多个值。
m.lower_bound 指的是某个键的第一个值的迭代器, upperbound指的是这个所有相同键的最后一个值的下一个值的迭代器;
比如
(键1, 值2)
(键2, 值4)
(键2, 值7)
(键2, 值8)
(键4, 值9)
(键5, 值9)
m.lower_bound(2)指的是 (键2, 值4)的迭代器。
而m.upperbound( 2 ) 指的是 (键4, 值9)的迭代器
在map里面 m.lower_bound(键) 就是大于或等于键值的第一个迭代器, m.lower_bound(键) 是大于键值的下一个迭代器。
比方说
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于有键3,所以的他值就是键3 的迭代器
m.lower_bound(3) 无论有没有键3,他都是键4的迭代器
再比如
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于没有键3,所以的他值就是键4 的迭代器
----------------------------------------------分割线--------------------------------
若是在multimap中
由于multimap的键值是可以重复的,同一个键对应多个值。
m.lower_bound 指的是某个键的第一个值的迭代器, upperbound指的是这个所有相同键的最后一个值的下一个值的迭代器;
比如
(键1, 值2)
(键2, 值4)
(键2, 值7)
(键2, 值8)
(键4, 值9)
(键5, 值9)
m.lower_bound(2)指的是 (键2, 值4)的迭代器。
而m.upperbound( 2 ) 指的是 (键4, 值9)的迭代器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
map的lower_bound和算法里面的lower_bound不一样的!
下面是msdn 关于map::lower_bound的描述:
The member function determines the first element X in
the controlled sequence that has equivalent ordering to key. If no such element exists, it returns map::end (STL/CLR)();
找的是相等的值,如果没有,返回的是end。
下面是msdn 关于map::lower_bound的描述:
The member function determines the first element X in
the controlled sequence that has equivalent ordering to key. If no such element exists, it returns map::end (STL/CLR)();
找的是相等的值,如果没有,返回的是end。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询