C++中的set中的upper_bound
set<int>upper_bound返回第一个大于关键字的指针如果我要返回第一个小鱼关键字的指针呢我发现这样可以解决:set<int>::iteratorit=a.lo...
set<int>
upper_bound返回第一个大于关键字的指针
如果我要返回第一个小鱼关键字的指针呢
我发现这样可以解决:
set<int>::iterator it=a.lower_bound(key);
--it;//不越界的前提
这样就获得了所要的指针
这样对么
因为以前写二叉树的时候都是自己实现 找前驱后继的 展开
upper_bound返回第一个大于关键字的指针
如果我要返回第一个小鱼关键字的指针呢
我发现这样可以解决:
set<int>::iterator it=a.lower_bound(key);
--it;//不越界的前提
这样就获得了所要的指针
这样对么
因为以前写二叉树的时候都是自己实现 找前驱后继的 展开
2个回答
展开全部
m.lower_bound(键) 返回值指的是某个键的迭代器(若该键不存在,则返回挨着这个键的下一个键的迭代器), m.upperbound(键)的返回值是这个键(无论该键是否存在)都返回挨着这个键的下一个键的迭代器
在map里面 m.lower_bound(键) 就是大于或等于键值的第一个迭代器, m.upperbound(键) 是大于键值的下一个迭代器。
比方说
(键1, 值2)
(键2, 值4)
(键3, 值3)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于有键3,所以的他值就是键3 的迭代器
m.upperbound(3) 无论有没有键3,他的返回值都是键4的迭代器
再比如
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于没有键3,所以的他的返回值就是键4 的迭代器
m.upperbound(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)的迭代器
set 相当于map , multiset相当于multimap,里面的upper_bound 的道理都是一样的。
在map里面 m.lower_bound(键) 就是大于或等于键值的第一个迭代器, m.upperbound(键) 是大于键值的下一个迭代器。
比方说
(键1, 值2)
(键2, 值4)
(键3, 值3)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于有键3,所以的他值就是键3 的迭代器
m.upperbound(3) 无论有没有键3,他的返回值都是键4的迭代器
再比如
(键1, 值2)
(键2, 值4)
(键4, 值9)
(键5, 值9)
若m.lower_bound(3) 由于没有键3,所以的他的返回值就是键4 的迭代器
m.upperbound(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)的迭代器
set 相当于map , multiset相当于multimap,里面的upper_bound 的道理都是一样的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询