我想排序数组(是的,不是向量)的字符串,下面从网站,如一些建议,这一个。这是我到目前为止编写的代码,但它始终会打印出此长错误(在Google上没有结果)。如何解决?
#include <algorithm>
#include <cstring>
#include <iostream>
//qsort(names, n, 15, (int (*)(const void *, const void *))strcmp);
int main()
{
std::cout << "hi";
char arr[3][6];
strcpy(arr[0], "hello"), strcpy(arr[1], "hillo"), strcpy(arr[2], "hallo");
std::sort(arr, arr + 3, [](char const *lhs,
char const *rhs) { return strcmp(lhs, rhs) < 0; });
//qsort(arr, 3, 20, (int (*)(const void *, const void *))strcmp);
for (int i = 0; i < 3; ++i)
std::cout << arr[i] << '\n';
}
这是错误消息的相关部分:
错误:必须使用大括号括起来的初始化程序来初始化数组
不幸的是,这不是很清楚,但是它来自排序实现内部。因此,让我们修改算法的前提条件:
std::sort
通过交换元素来实现。因此,它要求元素是可交换的。数组的元素是数组。阵列不可交换。因此,数组数组不能排序。
会在这里使用“字符串”类型吗?
使用std::string
将起作用。它是可交换的。您甚至不需要自定义比较功能,因为它甚至具有可比性。
是什么使得数组不可交换和其他类型可交换
交换通过移动初始化(和分配)进行补充。语言规则说数组不能移动初始化(也不能分配)。知道这一点后,看看错误消息是否有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句