将在其中使用的函数是您声明为集合的模板参数的类std::set::find()
的实例。Comparator
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
具体来说,比较器实例将被传递给 Key 对象,如果第一个位于第二个之前,则应该返回 true。所以是的,你的实现很好。
现在,进一步挖掘:如果你想说服自己,你可以深入挖掘 gcc 标准库实现的源代码,你会发现:
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;
}
您可以看到(这是您提供的类_M_key_compare
的一个实例),作为第一个参数(您的一个)调用,其返回值是一个键。的返回值用于三元表达式,所以它应该是一个布尔值。_Compare
__k
Key
_S_key(...)
_M_key_compare