我正在使用glib进行排序:
gint cmp_values_by_attr1(gpointer a, gpointer b) {
my_strcut *seq_a = *((my_strcut**) a);
my_strcut *seq_b = *((my_strcut**) b);
return (seq_a->attr1 - seq_b->attr1);
}
values = g_ptr_array_sized_new(4);
v = new_struct();
g_ptr_array_add(values, v);
...
g_ptr_array_sort(values, (GCompFunction) cmp_values_by_attr1);
现在在我的数组中,我想先按attr1
排序,然后按attr2
排序。如何实施?
答案 0 :(得分:0)
这很简单 - 比较函数返回小于,等于或大于零,具体取决于第一个值是小于,等于还是大于第二个值。您需要做的就是比较第一个属性,如果返回值不等于零则返回结果,否则比较第二个属性并返回结果:
gint comp_values (gpointer a, gpointer b) {
gint res;
my_strcut *seq_a = *((my_strcut**) a);
my_strcut *seq_b = *((my_strcut**) b);
res = seq_a->attr1 - seq_b->attr1;
if (res == 0) {
res = (seq_a->attr2 - seq_b->attr2);
}
return res;
}
答案 1 :(得分:0)
我已经使用了一些' hack'实现这种排序。
uint32_t
个类型。uint64_t
for_sort
添加到我的struct for_sort
的高32位移至attr1
for_sort
的低32位为attr2
for_sort
对数组进行排序,然后首先按attr1
排序,然后按attr2
排序。我已经实施并验证它正在运作。
缺点:
for_sort