【发布时间】:2017-04-11 02:08:12
【问题描述】:
我想写模板合并排序。
template <class RandomAccessIterator, class Comparator = std::less<>>
void MergeSort(RandomAccessIterator begin, RandomAccessIterator end, Comparator compare) {
int s = end - begin;
if (s > 1)
{
RandomAccessIterator middle = begin + s / 2 + 1;
MergeSort(begin, middle, compare);
MergeSort(middle, end, compare);
std::inplace_merge(begin, middle, end, compare);
}
}
我得到的信息是:error: wrong number of template arguments (0, should be 1) 模板 >.
我尝试将 std::less 移至函数声明,但也失败了。我需要做什么?
【问题讨论】:
-
std::less<T>需要T的类型,不能为空。也许你可以使用std::less<std::iterator_traits<RandomAccessIterator>::value_type>之类的东西。 -
@HenriMenke 从 C++14 开始就可以了。他们被称为钻石算子。