0

我正在尝试在 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 数组会有所帮助,但我现在看到它们有自己的基于“键”而不是“值”的排序方案。

谁能指出我在哪里可以找到这样的解决方案?

4

2 回答 2

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);
于 2012-08-02T17:12:33.227 回答
0

我可能会将元素存储在哈希表中,这样您仍然可以进行名称查找,并且还可以构造一个包含指向哈希元素的指针的优先级队列,这样您就可以快速获取下一个查找。

于 2012-08-02T16:54:38.570 回答