我有一个结构:
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
是个好主意吗?如果是这样,我应该将什么用于密钥和/或值?
答案 0 :(得分:2)
如果要使用QHash
进行快速查找,则哈希的密钥类型必须与搜索令牌类型相同。例如,如果要按Statistics
值查找元素,则哈希值应为QHash<Statistics, MyStruct*>
。
答案 1 :(得分:1)
如果您只能以一种特定的方式查找数据,那么QHash
应该没问题。但是,在您提取列表的情况下,您可能需要调查QMultiHash
及其.values()
成员。但是,请务必注意documentation:
QHash的密钥类型必须提供operator ==()和一个名为qHash()的全局哈希函数
如果您需要能够在不同时间根据不同的信息提取这些列表,那么您可能最好迭代列表。所有Qt的容器都提供std样式的迭代器,包括它的哈希映射。