c ++中的通用二进制搜索

use*_*778 0 c++ binary search templates

我想编写一个模板二进制搜索算法,它可以使用仲裁比较器搜索模板类型QList中的模板类型元素,如下所示:

template<typename T,typename compare_less>
static int binary_search(QList<T>* list, T target) {
    int low = 0;
    int high = list->count()-1;
    while (low <= high) {
        int middle = low + (high - low)/2;
        if (compare_less(*target, *list[middle]))
            high = middle - 1;
        else if (compare_less(*list[middle],*target))
            low = middle + 1;
        else
            return middle;
    }
    return low;
Run Code Online (Sandbox Code Playgroud)

}

现在,我如何正确实现这一点,以使其适用于QDateTime*模板参数?我想调用这样的函数:

int index = binary_search<QDateTime*, ???>(dateTimeList,date);
Run Code Online (Sandbox Code Playgroud)

其中dateTimeList的类型为QList,date的类型为QDateTime*,我真的不知道在问号位置写什么.

有人可以帮我正确实现算法,并告诉我如何用这些参数调用算法?

Har*_*lby 6

如果Qt文档有效,则不必实现任何操作.只需将std :: binary_search与列表的.begin()和.end()一起使用,如果需要实现比较器,请执行此操作并将其传递给STL算法.

  • 所以使用std :: lower_bound(http://www.cplusplus.com/reference/algorithm/lower_bound/).如果您不想插入重复项,则可能需要添加相等的测试,但它会为您提供所需的内容. (3认同)
  • #include <algorithm> (2认同)