我有一个特定的结构:

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*>大致等效的查找。理想情况下,我希望能够更快地执行查找,而不会损失插入速度。这使我着眼于QHash,但是当我仅存储不带键的值时,或者即使这是一个好主意,我不确定如何使用QHash

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

最佳答案

如果您只能以一种特定的方式查找数据,那么QHash应该适合您。但是,如果要提取列表,则可能需要调查QMultiHash及其.values()成员。但是,必须注意documentation


  QHash的键类型必须提供operator ==()和称为qHash()的全局哈希函数


如果您需要能够在不同的时间基于不同的信息提取这些列表,那么最好遍历这些列表。 Qt的所有容器都提供标准样式的迭代器,包括其哈希映射。

10-06 05:04