c++ - 使用 std:sort 对 cpp 中的字符串数组进行排序
问题描述
我正在尝试对字符串数组(是的,不是向量)进行排序,遵循一些网站(例如这个网站)的建议。这是我到目前为止写的代码,但它总是打印出这个长错误(在谷歌上没有结果)。如何解决这个问题?
#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
将起作用。它是可交换的。您甚至不需要自定义比较函数,因为它甚至具有可比性。
是什么使数组不可交换和其他类型可交换
交换由移动初始化(和分配)实现。语言规则说数组不可移动初始化(也不可分配)。知道了这一点,看看错误信息是否有意义。
推荐阅读
- python - 创建一个 python gui pdf 提取应用程序?当我设置 if 语句时,宽度函数弹出错误?
- excel - Excel 单元格参考失败
- python - 为什么循环不在单独的线程中停止?
- python - discord.py keyerror 中的歌词命令
- java - 如何获取字符串的正则表达式模式?
- html - 反应 xarrows 超出模态。试过zindex但没用
- tensorflow - 如何在适合 keras 的过程中均衡减重?
- c++ - 错误:“在静态成员函数中无效使用成员‘文件名’”
- mysql - 字符串到 now() MySQL
- android - 如何在android的recyclerview中保存复选框状态