0

私は特定の構造体を持っています:

struct MyClass::MyStruct
{
    Statistics stats;
    Oject *objPtr;
    bool isActive;
    QDateTime expiration;
};

そのためには、ポインタをプライベート コンテナに格納する必要があります。へのポインターを返す必要があるクライアント コードからオブジェクトを取得しますMyStruct。例えば:

QList<MyStruct*> MyClass::structPtr( Statistics stats )
{
    // Return all MyStruct* for which myStruct->stats == stats (== is overloaded)
}

また

QList<MyStruct*> MyClass::structPtr( Object *objPtr )
{
    // Return all MyStruct* for which myStruct->objPtr == objPtr
}

現在、これらを に格納して、QLinkedList<MyStruct*>高速挿入と とほぼ同等のルックアップができるようにしていますQList<MyStruct*>。理想的には、挿入速度を落とさずにルックアップをより高速に実行できるようにしたいと考えています。これにより、 を見ることになりますが、キーなしで値を格納するだけの場合、またはそれが良い考えである場合でも、 QHasha をどのように使用するかわかりません。QHash

このような問題に対処する適切な Qt/C++ の方法は何ですか? 理想的には、ルックアップ時間は<= log(n). QHashここで良い考えでしょうか?その場合、キーや値には何を使用すればよいですか?

4

2 に答える 2

1

1 つの特定の方法でデータを検索するだけで生活できる場合は、aQHashで問題ありません。ただし、リストを引き出している場合はQMultiHash、その.values()メンバーを調査することをお勧めします。ただし、ドキュメントから次の点に注意することが重要です。

QHash のキー タイプは、operator==() と qHash() というグローバル ハッシュ関数を提供する必要があります。

これらのリストをさまざまな時点でさまざまな情報に基づいて取得できるようにする必要がある場合は、リストを反復処理する方がよい場合があります。Qt のすべてのコンテナは、ハッシュ マップを含む std スタイルのイテレータを提供します。

于 2013-06-21T14:41:31.387 に答える