日付のベクトルに対して実行するカスタムバイナリ検索を実装しようとしています。
私の二分探索関数は次のとおりです。
template <typename RandomAccessIterator, typename Value, typename Comparer>
inline int binary_search(RandomAccessIterator const first, RandomAccessIterator const last, Value const& value, Comparer comparer)
{
RandomAccessIterator it(std::lower_bound(first, last, value, comparer));
if (it == last || comparer(*it, value) || comparer(value, *it))
return distance(first,last);
return distance(first,it);
}
私が使用しているコンパレータは次のように定義されています。
template <class T>
inline bool cmp(T lhs,T rhs)
{
return lhs<rhs;
}
これら2つは問題なくコンパイルされますが、次のコードを使用してbinary_search関数を呼び出そうとすると、コンパイルエラーが発生します。
binary_search(date_list.begin(),date_list.end(),date2,cmp)
ここで、date_listは日付を含むベクトルであり、date2はintです。
正確なエラーメッセージは次のとおりです。
error: no matching function for call to ?binary_search(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int&, <unresolved overloaded function type>)?
これを解決する方法について何かアイデアはありますか?