用于存储和访问struct指针的正确Qt数据结构

时间:2013-06-21 13:25:35

标签: c++ qt data-structures struct hashtable

我有一个结构:

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是个好主意吗?如果是这样,我应该将什么用于密钥和/或值?

2 个答案:

答案 0 :(得分:2)

如果要使用QHash进行快速查找,则哈希的密钥类型必须与搜索令牌类型相同。例如,如果要按Statistics值查找元素,则哈希值应为QHash<Statistics, MyStruct*>

答案 1 :(得分:1)

如果您只能以一种特定的方式查找数据,那么QHash应该没问题。但是,在您提取列表的情况下,您可能需要调查QMultiHash及其.values()成员。但是,请务必注意documentation

  

QHash的密钥类型必须提供operator ==()和一个名为qHash()的全局哈希函数

如果您需要能够在不同时间根据不同的信息提取这些列表,那么您可能最好迭代列表。所有Qt的容器都提供std样式的迭代器,包括它的哈希映射。