如何使用自定义比较器测试平等

How to test for equality with custom comparator?

本文关键字:测试 比较器 何使用 自定义      更新时间:2023-10-16

我正在尝试通过提供附加参数来概括 binary seach的实现:自定义比较器

template <typename T, typename It>  // Not sure if right !
struct LessCmp
{
    bool operator()(const T& lhs, It rhs)
    {
        return lhs < *rhs;
    }
};
template <typename It, typename T, typename Cmp>
bool binary_search(It begin, It end, const T& target, Cmp op) // Not sure if right !
{
    while (begin != end)
    {
        auto offset  = std::distance(begin, end);
        It middle = begin;
        std::advance(middle, offset / 2);
        if (/* how ? */)             // target == middle
        {
            return true;
        }
        else if (op(target, middle)) // target < middle
        {
            end = middle;
        }    
        else                         // target > middle
        {
            begin = middle;
            std::advance(begin, 1);
        }
    } 
    return false
}

如何使用LessCmp执行平等测试?如何实现LessCmp,以便可以在binary_seach()中使用?

假设opT上定义了严格的总订单。

if(op(target, middle))
{
     // target is less than middle
}
// target could be equal or greater than middle
// if middle is less than target, then target is greater
else if (op(middle, target))
{
    // target is greater than middle
}
else
{
    // target is equal to middle
}