如何在C中创建一个可排序的字符串 - 整数对集合?

时间:2012-08-02 16:50:12

标签: arrays sorting sortables

我正在尝试在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'的排序方案。

任何人都能指出我在哪里找到这样的解决方案吗?

2 个答案:

答案 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)

我可能会将元素存储在哈希表中,这样您仍然可以进行名称查找,并构建一个包含散列元素指针的优先级队列,因此您可以快速进行下一次查找。