0

我想编写一个模板二进制搜索算法,它可以使用任意比较器在模板类型 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;

}

现在我该如何正确实现它以使其与 QDateTime* 模板参数一起使用?我想这样调用函数:

int index = binary_search<QDateTime*, ???>(dateTimeList,date);

dateTimeList 是 QList 类型,date 是 QDateTime* 类型,我真的不知道在问号位置写什么。

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

4

1 回答 1

6

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

于 2012-12-12T16:37:40.743 回答