如何使用自定义比较器测试平等
How to test for equality with custom comparator?
我正在尝试通过提供附加参数来概括 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()
中使用?
假设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
}
相关文章:
- std::设置自定义比较器
- C++中"std::sort"比较器的不同类型
- 将 std::set 与基于键的比较器一起使用
- 带自定义比较器的最小优先级队列
- 函数类作为比较器
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- set_intersection使用自定义设置比较器
- 如何为集合 c++ 建立比较器
- C++复杂情况的比较器通过参数问题
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 对没有比较器或λ函数的向量进行排序?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 用户定义的结构是否有默认C++比较器?
- C++设置了一个用于排序的比较器和另一个用于唯一性的比较器
- 使用迭代器的自定义比较器函数
- C++对λ比较器EXC_BAD_ACCESS进行排序
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- 如何使用自定义比较器测试平等