stl(GCC4.9.3 in MinGW)中rbtree lower_bound/upper_bound 的实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl(GCC4.9.3 in MinGW)中rbtree lower_bound/upper_bound 的实现相关的知识,希望对你有一定的参考价值。

STL内部实现的rbtree,实现 lower_bound/upper_bound 过程,是从 begin() 开始向 end() 进行遍历,将元素的 key 与目标 key 进行比较,直至找到的第一个符合要求的 iterator 为止!具体看代码,如下

位于bits/stl_tree.h

 1 template<typename _Key, typename _Val, typename _KeyOfValue,
 2        typename _Compare, typename _Alloc>
 3 typename _Rb_tree<_Key, _Val, _KeyOfValue,
 4           _Compare, _Alloc>::const_iterator
 5 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
 6 _M_lower_bound(_Const_Link_type __x, _Const_Link_type __y,
 7        const _Key& __k) const
 8 {
 9   while (__x != 0)
10 if (!_M_impl._M_key_compare(_S_key(__x), __k))
11   __y = __x, __x = _S_left(__x);
12 else
13   __x = _S_right(__x);
14   return const_iterator(__y);
15 }
16 
17 template<typename _Key, typename _Val, typename _KeyOfValue,
18        typename _Compare, typename _Alloc>
19 typename _Rb_tree<_Key, _Val, _KeyOfValue,
20           _Compare, _Alloc>::iterator
21 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
22 _M_upper_bound(_Link_type __x, _Link_type __y,
23        const _Key& __k)
24 {
25   while (__x != 0)
26 if (_M_impl._M_key_compare(__k, _S_key(__x)))
27   __y = __x, __x = _S_left(__x);
28 else
29   __x = _S_right(__x);
30   return iterator(__y);
31 }

 

以上是关于stl(GCC4.9.3 in MinGW)中rbtree lower_bound/upper_bound 的实现的主要内容,如果未能解决你的问题,请参考以下文章

STL源码剖析(set/map)

c++mingw STL安装

loongson编译所遇问题

STL标准库-容器-rb_tree

STL之rb_tree的find函数

C/C++ - Codeblocks 调试 MinGW GDB STL (查看容器数据)配置教程(完整版)