在引擎盖下,STL映射是一个红黑树,它使用其键的<运算符或用户提供的比较来计算元素插入的位置.
map :: find()返回与提供的键匹配的元素(如果存在任何匹配)
如果不使用相等运算符,它怎么能这样做呢?假设我的地图中包含密钥1,2,3和4.仅使用<,我可以看到键2应该在1之后,2之后和3之前.但我不知道2是否与2相同.
我甚至可以在/usr/include/c++/4.4.3/bits/stl_tree.h中看到find()只使用用户提供的比较函数:
template<typename _Key, typename _Val, typename _KeyOfValue,
typename _Compare, typename _Alloc>
typename _Rb_tree<_Key, _Val, _KeyOfValue,
_Compare, _Alloc>::iterator
_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
find(const _Key& __k)
{
iterator __j = _M_lower_bound(_M_begin(), _M_end(), __k);
return (__j == end()
|| _M_impl._M_key_compare(__k,
_S_key(__j._M_node))) ? end() : __j;
}
Run Code Online (Sandbox Code Playgroud)
隐秘.如果你可以告诉我如何在_M_impl._M_key_compare没有明显循环的情况下最终使用比较函数,那么奖励积分.
Tre*_*edd 20
如果(a < b)是false和(b < a)是false的话(a == b).这就是STL的find()工作方式.
| 归档时间: |
|
| 查看次数: |
6162 次 |
| 最近记录: |