C++ 用于存储和访问结构指针的适当Qt数据结构
我有一个特定的结构:C++ 用于存储和访问结构指针的适当Qt数据结构,c++,qt,data-structures,struct,hashtable,C++,Qt,Data Structures,Struct,Hashtable,我有一个特定的结构: struct MyClass::MyStruct { Statistics stats; Oject *objPtr; bool isActive; QDateTime expiration; }; 为此,我需要将指向的指针存储在私有容器中。我将从客户端代码中获取对象,我需要为这些对象返回指向MyStruct的指针。例如: QList<MyStruct*> MyClass::structPtr( Statistics stats
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 MyClass::structPtr(统计数据)
{
//返回MyStruct->stats==stats(=重载的所有MyStruct*)
}
或
QList MyClass::structPtr(对象*objPtr)
{
//返回MyStruct->objPtr==objPtr的所有MyStruct*
}
现在,我正在将它们存储在QLinkedList
中,这样我就可以快速插入和查找大致相当于QList
。理想情况下,我希望能够更快地执行查找,而不会丢失插入速度。这让我想到了QHash
,但我不确定当我只存储没有键的值时如何使用QHash
,或者即使这是个好主意
什么是解决此类问题的正确Qt/C++方法?理想情况下,查找时间应为
如果要使用QHash
进行快速查找,则哈希的密钥类型必须与搜索令牌类型相同。例如,如果您想通过统计信息
值来查找元素,则哈希值应为QHash
如果您想使用QHash
进行快速查找,则哈希值的键类型必须与搜索令牌类型相同。例如,如果您希望通过统计信息
值查找元素,则哈希值应该是QHash
如果您只能以一种特定的方式查找数据,那么QHash
应该适合您。不过,在您要拉出列表的情况下,您可能需要调查QMultiHash
及其.values()
成员。但是,需要注意的是,从以下方面:
QHash的键类型必须提供运算符==()和名为QHash()的全局哈希函数
如果您需要能够在不同的时间根据不同的信息提取这些列表,那么最好迭代这些列表。Qt的所有容器都提供std风格的迭代器,包括它的哈希映射。如果您只能以一种特定的方式查找数据,那么QHash
应该适合您。不过,在您要拉出列表的情况下,您可能需要调查QMultiHash
及其.values()
成员。但是,需要注意的是,从以下方面:
QHash的键类型必须提供运算符==()和名为QHash()的全局哈希函数
如果您需要能够在不同的时间根据不同的信息提取这些列表,那么最好迭代这些列表。Qt的所有容器都提供std风格的迭代器,包括它的哈希映射。如果我使用QHash
,然后在需要迭代列表时调用hash.values()
,那么成本会不会很高?我认为迭代所有对象的最快方法是使用可以从begin()获得的迭代器
。我将接受另一个答案,因为我认为它更有帮助,但是+1可以提供一些好的建议。谢谢如果我使用QHash
,然后在需要迭代列表时调用hash.values()
,代价会很高吗?我认为迭代所有对象的最快方法是使用可以从begin()
获得的迭代器。我会接受另一个答案,因为我认为它有点帮助,但是+1是一些好的建议。谢谢
QList<MyStruct*> MyClass::structPtr( Object *objPtr )
{
// Return all MyStruct* for which myStruct->objPtr == objPtr
}