模板,STL,C ++
我编写了这个例程来命令项目,只保留唯一的项目,它采用类型为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 *数据进行排序
{"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 *?谢谢。
没有找到相关结果
已邀请:
3 个回复
版萍层分
默认使用
,这只是比较你的情况下的地址。 如果要对C字符串进行排序,则必须将比较器传递给
。要做到这一点,你可以让用户通过一个比较器,在比较器函数上使用特化或这些的组合:
蜗仓馈
艾食魄轻县
的
操作符执行指针比较,而不是字符串数据比较。要么使用
作为字符串数据,要么使用special9ѭ,以便使用基于
的特殊比较器调用sort。我猜你得到了你输出的输出,因为你的编译器决定在内存中反向按字母顺序排列它的所有字符串常量。
也没有做任何事情 - 它只能起作用,因为你的编译器在编译时汇集了内存中的所有字符串,所以所有的12个字符串都会使用相同的内存。如果从文件中读取完全相同的字符串,则数组不会更改。这个问题的解决方案是一样的。