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

qsortISO 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 に答える