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
}

现在我将这些存储在 a 中QLinkedList<MyStruct*>以便我可以快速插入,并且查找大致相当于QList<MyStruct*>. 理想情况下,我希望能够更快地执行查找,而不会失去插入速度。这让我看了一下QHash,但我不确定QHash当我只存储没有键的值时如何使用 a ,或者即使这是一个好主意。

解决此类问题的正确 Qt/C++ 方法是什么?理想情况下,查找时间应该是<= log(n). QHash在这里是个好主意吗?如果是这样,我应该使用什么作为键和/或值?

4

2 回答 2

2

如果要QHash用于快速查找,哈希的键类型必须与搜索令牌类型相同。例如,如果你想按Statistics值查找元素,你的哈希应该是QHash<Statistics, MyStruct*>.

于 2013-06-21T13:36:16.083 回答
1

如果您只能以一种特定的方式查找数据,那么 aQHash应该适合您。但是,在您将列表拉出的情况下,您可能需要调查QMultiHash及其.values()成员。但是,重要的是要注意,从文档中:

QHash 的键类型必须提供 operator==() 和一个名为 qHash() 的全局散列函数

如果您需要能够在不同时间根据不同信息提取这些列表,您最好对列表进行迭代。Qt 的所有容器都提供标准风格的迭代器,包括它的哈希映射。

于 2013-06-21T14:41:31.387 回答