首页 > 解决方案 > 使用 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';
}

标签: c++arraysstringsorting

解决方案


这是错误消息的相关部分:

错误:数组必须用大括号括起来的初始化程序初始化

不幸的是,这不是很清楚,但不是来自排序实现。因此,让我们修改算法的前提条件:

std::sort是通过交换元素来实现的。因此,它要求元素是可交换的。数组的元素是数组。数组不可交换。因此,数组数组是不可排序的。

将使用类型“字符串”在这里工作吗?

使用 std::string将起作用。它是可交换的。您甚至不需要自定义比较函数,因为它甚至具有可比性。

是什么使数组不可交换和其他类型可交换

交换由移动初始化(和分配)实现。语言规则说数组不可移动初始化(也不可分配)。知道了这一点,看看错误信息是否有意义。


推荐阅读