で使用される関数は、セットのテンプレートパラメータとして宣言しstd::set::find()
たクラスのインスタンスです。Comparator
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
具体的には、コンパレータインスタンスはKeyオブジェクトに渡され、最初のインスタンスが2番目のオブジェクトの前にある場合は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
のインスタンスである)が最初のパラメーター(の1つ)として呼び出され、その戻り値がキーであることがわかります。の戻り値は3値式で使用されるため、ブール値である必要があります。_Compare
__k
Key
_S_key(...)
_M_key_compare