Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用于存储和访问结构指针的适当Qt数据结构_C++_Qt_Data Structures_Struct_Hashtable - Fatal编程技术网

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
}