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)
您可以在阵列本机数据类型的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)