gpt4 book ai didi

c++ - 模板、STL、C++

转载 作者:太空狗 更新时间:2023-10-29 23:47:55 25 4
gpt4 key购买 nike

我编写此例程来对项目进行排序,仅保留唯一项目,其中它接受类型 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;
}

我的问题是我期待它像这样对 const char *data 进行排序

{"aa", "bb", "bc", "ca", "bc", "aa", "cc", "cd", "ca", "bb"};
into //aa bb bc ca cc cd

然而它以相反的方式进行,:“cd cc ca bc bb aa”为什么要这样做?它不使用标准的字符串比较吗?如果我愿意,我该如何更改它以便它按字母顺序对 const char * 进行排序?谢谢。

最佳答案

sort()使用 operator<默认情况下,这只会比较您案例中的地址。

如果你想对 C 字符串进行排序,你必须将比较器传递给 sort() .要一般地执行此操作,您可以让用户传递比较器,对比较器函数使用特化或这些的组合:

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);
// ...
}

关于c++ - 模板、STL、C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3277927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com