我想编写一个模板二进制搜索算法,它可以使用仲裁比较器搜索模板类型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 *,我真的不知道在问号的位置写什么。
有人可以帮我正确实现算法并告诉我如何用这些参数调用算法吗?
答案 0 :(得分:6)
如果Qt documentation有效,则不必实施任何操作。只需将std :: binary_search与列表的.begin()和.end()一起使用,如果需要实现比较器,请执行此操作并将其传递给STL算法。