我有一个需要内置排序的应用程序,我希望将现有的排序机制替换为STXXL提供的排序。我已经使用STXXL成功测试了它,但是我的问题是,尽管排序的特定运行需要对固定长度的字符串进行操作,但是长度是在运行时确定的,并且可以在10字节至4000字节之间的任意位置。如果实际长度很小,则始终允许4000字节显然会非常低效。
对于不熟悉STXXL的人,我认为问题大致等同于在不知道编译时对象大小的情况下定义std :: vector。但是,我不是C ++专家-该应用程序是用C编写的。
在我的测试中,这是我正在排序的类型:
struct string80
{
char x[80];
};
这是STXXL分类器的类型定义:
typedef stxxl::sorter<string80, sort_comparator80> stxxl_sorter80;
问题是我不想将数组大小硬编码为'80'。
我唯一能想到的解决方案是定义许多不同长度的结构,并在运行时选择最接近的结构。我想念一个把戏吗?我在想C而不是C ++吗?
最佳答案
这里没有很好的解决方案,至少没有STXXL。
STXXL分类器经过高度优化,并且代码要求在编译时通过模板参数提供数据类型的大小。我看不出这会改变,甚至不会改变。
为许多不同的参数实例化类的方法不是很好,但是很常见。试想一下简单C ++程序中使用的所有不同std :: vector实例,这些实例都可以通过C中的void *函数来处理。
根据要推出的代码量,尝试实例化2的幂,然后再对通用参数进行细化。