问题标签 [qhash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
serialization - 如何在单个文件中序列化 QHash 和 QMap?
我有一个 QHash 和一个单独的 QMap。我可以单独序列化它们。但我想在一个文件中对它们进行序列化:
最后一次读取(此处为 myHash)始终为空。当我切换排序
所以这里 myMap 是空的。
如何同时序列化两者?
c++ - 从文件读取的数据比文件大小占用更多的内存
我通过以下方式将一些数据写入文件:
该文件最终等于 484MB。之后我循环阅读它:
当这个读取循环正在运行时,我看到在任务管理器中我的程序开始占用大约 1300MB 的内存,之后我收到“在文件 text\qharfbuzzng.cpp,第 626 行:内存不足”错误。我的问题是:程序开始占用 2 倍以上的文件内存是否正常,我应该分块读取它还是我做错了什么?
c++ - QPair迭代的QHash
我有这个 QHash ,并且我有 N_id 的值和特定索引的名称,我怎样才能获得相应 A_id 的值。我正在尝试使用 STL 风格的迭代器。如果需要,我可以将 QHash 更改为 QMap 但我不能使用:
编辑:在我的例子中,N_id 和 A_id 一起形成了一个唯一的键。
qt - 部分键匹配 QHash
我有一个QHash
定义如下
我在这个哈希中插入了一些值,如下所示:
我有几个 QStrings 如下:
我应该找出这些值是否存在于 中hashLookup
,即,因为OMG_1
包含OMG
,我应该能够检索Oh my God!
.
我尝试使用
它当然会尝试查找查找表中不存在且不返回任何内容的关键 OMG。Qt 中是否可以部分匹配键值?如果是,我应该如何实施。
c++ - 了解未找到密钥时 QHash 的作用
注意:您可以在本文末尾找到一个最小的工作示例。
我正在使用Qt 5.7。假设我有以下内容QHash
:
和
和
我已经像这样初始化了哈希映射:
我已经通过调用测试了它
两者都返回相同的结果,即3
. HashKey
现在,我尝试通过将整数转换为并在其上调用上述两种方法来对不属于哈希映射的键执行相同的操作:
我得到的是8
(第一次通话value().x
)和5
(第二次通话find(...).value().x
)
文档指出
如果散列中没有具有指定键的项目,这些函数将返回一个默认构造的值。
我点击了链接default-constructed value
并得到了以下信息:
[...] 例如,QVector 使用默认构造的值自动初始化其项目,如果指定的键不在映射中,QMap::value() 返回默认构造的值。对于大多数值类型,这仅仅意味着使用默认构造函数创建一个值(例如,QString 为空字符串)。但是对于像 int 和 double 这样的原始类型以及指针类型,C++ 语言没有指定任何初始化。在这些情况下,Qt 的容器会自动将该值初始化为 0。
在我的情况下,这意味着一个HashValue()
电话。然而,至少可以说我得到不同结果的事实令人困惑。find(...)
尽管文档没有提到将无效键作为参数传递时会发生什么,但我希望得到相同的结果。它只是说它找到了该键的第一次出现并返回一个迭代器(显然,因为我value()
在上面的调用中调用了它)。
上面引用的文档片段(再次回到文档QHash
)后面是
如果要检查哈希是否包含特定键,请使用 contains()
我可以处理contains()
每次查询哈希图时都必须调用的问题,但这意味着要进行两次函数调用——首先检查键是否存在,然后在value(...)
找到有效条目时调用以获取实际值。下面的调用返回"Key 100 not found"
:
我希望这个检查在内部完成,但显然这不会发生(我的猜测是为了防止对这个容器的查询功能产生一些性能影响)。
这里的问题是为什么会发生这一切,以及这一切背后到底发生了什么?
这是项目及其代码:
HashTest.pro
主文件
c++ - QSet不被 gcc 编译
我正在尝试QSet
用于存储函数指针列表。有关更多详细信息,请参阅此代码。问题是这段代码不能由 gcc/mingw 编译。MSVC 正常编译它。我究竟做错了什么?
也许,我应该像文档中所说的那样为类型声明operator==
和函数,但我不知道该怎么做,因为当我声明时,我收到以下错误:qHash()
UikHook
opertator==
PS 我正在使用 Qt 5.8、gcc 6.2、msvc2015
更新:通过将 QSet 替换为 QVector 解决。
c++ - QMutableHashIterator - 没有合适的默认构造函数
我正在尝试将数据传递到名为“dictionary”的哈希中,我想我会使用 QMutableHashIterator 来遍历哈希并向其中添加值,但是,我不断收到此错误,但我不知道如何解决它。我看过其他有类似错误的问题,但没有一个真的对我有帮助。所以我想我会问,有人可以帮我解决这个错误:
这是我的代码:
主窗口.h:
主窗口.cpp:
提前致谢!
c++ - 为我的班级编写自定义 qhash() 函数
我想使用一个QHash<MyOwnClass&, MyOwnEnum>
(MyOwnClass
如果它确实重要的成员)。文档说应该定义一个全局qhash(MyOwnClass&)
函数。好的,例如:
全局变量.h:
globals.cpp:
我应该在哪里包含 my globals.h
,以便编译器能够看到和使用它?
我正在使用 MSVS2015 和 Qt 5.8。我相信这个问题很愚蠢并且有非常简单的解决方案,只要答案能帮助像我这样的许多人。
qt - 我应该在基于 C++11 范围的 QHash::keys() 上使用 qAsConst
在这篇文章再见,来自 KDAB 的 Q_FOREACH,他们警告说,基于范围的for
可能会导致 Qt 容器的分离。
另请参阅:在 Qt 中正确使用 C++11 基于范围的 for 循环
我知道这for
会导致分离,因为如果容器不是 const,它会调用一些非常量迭代器。返回值
是否相同?
该函数是 const 所以我的地图不会分离,但返回值是按值传递的,所以我会复制 QList 两次吗?QHash::keys()
keys()
那么,我应该像这样循环吗?