簡體   English   中英

如何使用自定義比較器測試是否相等?

[英]How to test for equality with custom comparator?

我試圖通過提供一個附加參數來概括Binary Seach的實現: Custom Comparator

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM