有没有一种简单的方法来排序char*的数组?C++

baa*_*h05 4 c++ sorting in-place external-sorting

我有char*一个文件数组.我工作的公司将数据存储在平面文件中.有时数据会被排序,但有时却不是.我想对文件中的数据进行排序.

现在我可以从头开始编写代码来执行此操作.有没有更简单的方法?

当然,就地排序将是最佳选择.我正在处理大文件并且内存很少.但我会考虑所有选择.

所有字符串都是相同的长度.

这是一些示例数据:

the data is of fixed length
the Data is of fixed length
thIS data is of fixed lengt
Run Code Online (Sandbox Code Playgroud)

这将代表三条长度为28的记录.该应用程序知道长度.每条记录以CRLF(\r\n)结束,但这种情况无关紧要.

Leo*_*ans 15

template<size_t length> int less(const char* left, const char* right) {
    return memcmp(left, right, length) < 0;
}

std::sort(array, array + array_length, less<buffer_length>);
Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 6

如果您无法将数据放入RAM中,请使用GNU排序程序(外部):它将对任意大小的文件进行排序,文件越大,创建过程的额外成本就越小.


Joh*_*ing 5

您可以在阵列本机数据类型的STL中使用算法,而不仅仅是在STL容器上.使用std :: sort的另一个建议不会像发布的那样工作,因为当字符串不相同时strcmp返回一个值为所有比较的值为true,而不仅仅是左边小于右边的值手边 - 这是std :: sort想要的; 左手侧返回true的二元谓词小于右手侧.

这有效:

struct string_lt : public std::binary_function<bool, char, char>
{
    bool operator()(const char* lhs, const char* rhs)
    {
        int ret = strcmp(lhs, rhs);
        return ret < 0;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    char* strings [] = {"Hello", "World", "Alpha", "Beta", "Omega"};
    size_t numStrings = sizeof(strings)/sizeof(strings[0]);

    std::sort(&strings[0], &strings[numStrings], string_lt());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)