C++ 模板、STL、C和x2B+;

C++ 模板、STL、C和x2B+;,c++,templates,stl,C++,Templates,Stl,我编写这个例程是为了对项目进行排序,只保留唯一的项目,其中包含一个类型为T的数组,以及数组的大小。它在处理后返回数组的新大小 template <class T> int reduce(T array[], int size) { T *begin = array; T *end = array + size; sort(begin, end); T *end_new = unique(begin, end); return end_new -

我编写这个例程是为了对项目进行排序,只保留唯一的项目,其中包含一个类型为T的数组,以及数组的大小。它在处理后返回数组的新大小

template <class T>
int reduce(T array[], int size) {
    T *begin = array;
    T *end = array + size;
    sort(begin, end);
    T *end_new = unique(begin, end);
    return end_new - array;
}
然而,它的做法正好相反:“cd-cc-ca-bc-bb-aa”
为什么会这样?它不使用标准字符串比较吗?如果我想,我如何修改它,使其按字母顺序排列?谢谢。

sort()
使用
运算符
const char*
std::sort uses<默认情况下,您的函数与stl非常不同。为什么不直接向它传递迭代器和比较器而不是指针呢?
{"aa", "bb", "bc", "ca", "bc", "aa", "cc", "cd", "ca", "bb"};
into //aa bb bc ca cc cd
template<class T> bool my_comp(T a, T b) {
    return a < b;
}

template<> bool my_comp<const char*>(const char* a, const char* b) {
    return std::strcmp(a, b) < 0;
}

template<class T, class Comp> 
int reduce(T array[], size_t size, Comp comp = my_comp<T>) {
    // ...
    std::sort(begin, end, comp);
    // ...
}