我想知道如何使用单个排序函数从2个不同的标准中进行排序。 我正在考虑实现一个sort函数(Sort),它有一个指向另一个函数(Criteria)的指针作为参数。该功能Criteria使用结构为我提供了(比方说)名称或学生的年龄。所以一个函数返回两种类型的数据。我认为这必须是一个空白。我想使用冒泡排序,但我不知道如何实现Criteria函数,因为我希望它返回char或int值。
答案 0 :(得分:0)
qsort通过指向比较函数来解决问题,该函数采用两个指向结构的指针(左和右)并比较指向的值:
compare( left, right ){
if( left->field < right->field )
return -1;
if( left->field > right->field )
return 1;
return 0;
}
左侧和右侧类型以void*
传递,但转换为具体类型。
比较的不同实现给出了不同的字段。
替代方案是union / struct
struct data {
enum Types type;
union {
double dblVal;
int intVal;
....;
} u;
};
该类型表示联合中的数据类型,然后可以适当地读取成员。
这是lua
对其类型系统采取的方法。