コードはCです。structs
親子関係を持つ2つのタイプのオブジェクト()があります。1つの親タイプは0
複数の子タイプを持つことができ、子は独自の子を持つことはできません。親O(1)
ルックアップ(uID
構造体メンバーによる)と子ルックアップ(これもuID
struct member)その親が誰であるかを知らずに。親へのポインタを取得したら、その子を反復処理できるようにしたいと思います。そして、私が子供へのポインターを持っているとき、私はその親が誰であるかを知りたいです。プログラムの実行中に、任意の子または任意の親を削除または挿入したり、子がその親を変更したりできます。親が削除されると、その子も削除される必要があります。そして、これはすべてマルチスレッド環境で行う必要があるため、スレッドセーフな読み取りが必要です(キー検索には読み取り専用ロックを使用し、挿入/削除/親の再生成には読み取り/書き込みロックを使用します)。どのようなデータ構造をお勧めしますか?
追加した:
現在、uthashライブラリ(http://uthash.sourceforge.net/)を使用して実装しようとしています。
struct parent
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct child *first_child;
UT_hash_handle hh;
};
struct child
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct parent *parent;
UT_hash_handle hh;
};
struct parent *parents_list = NULL;
struct child *children_list = NULL;
問題は、新しい子供が到着したとき、それは尻尾になってしまい、その「兄弟」とは関係がないということです。