[英]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()
?
假設op
在T
定義了嚴格的總順序。
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.