我正在尝试在C中创建一个可排序的对象集合。每个对象都包含一个唯一的字符串和一个可能非唯一的整数,有点像字典或散列。然而,诀窍是我需要能够按整数部分对集合进行排序。例如,如果集合如此:
a =
{
{"string 1", 10},
{"another string", 4},
{"yet another string", 74}
}
按升序排序a
会导致:
{
{"another string", 4},
{"string 1", 10},
{"yet another string", 74}
}
或者如果按降序排序会导致:
{
{"yet another string", 74},
{"string 1", 10},
{"another string", 4}
}
这个想法是,一旦排序,我可以说get_the_first_sorted_item(a)
或类似的东西,然后是get_the_next_sorted_item(a)
或类似的东西,直到收集结束。
虽然我认为Judy数组会有所帮助,但我现在看到他们有自己的基于'key'而不是'value'的排序方案。
任何人都能指出我在哪里找到这样的解决方案吗?
答案 0 :(得分:2)
qsort
由ISO C定义,采用比较函数以允许对结构进行排序,并且应该适合您的目的;
// The type of the entries.
typedef struct { const char* str; int num; } A;
// A comparison function
int compar(const void* a, const void* b)
{
return ((A*)a)->num - ((A*)b)->num;
}
...
A a[] = {
{ "string 1", 10 },
{ "another string", 4},
{ "yet another string", 74}
};
// Sort the entries
qsort(a, sizeof(a)/sizeof(A), sizeof(A), compar);
答案 1 :(得分:0)
我可能会将元素存储在哈希表中,这样您仍然可以进行名称查找,并构建一个包含散列元素指针的优先级队列,因此您可以快速进行下一次查找。