- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想做的是:
#include <QVector>
#include <QLinkedList>
#include <QSet>
class MyType
{
//...
};
int main(int argc, char** argv)
{
QVector<MyType> vector;
QSet<QVector<MyType>::iterator> a;
a.insert(vector.begin()); // This is fine
QLinkedList<MyType> linkedList;
QSet<QLinkedList<MyType>::iterator> b;
b.insert(linkedList.begin()); // This does not compile
return 0;
}
编译器信息是:
error: no matching function for call to 'qHash(const QLinkedList<MyType>::iterator&)'
我知道,前三行编译的原因是 QVector
, 迭代器定义为 typedef T* iterator;
但对于 QLinkedList
它是一种自定义类型。
我发现,QSet
模板类是根据哈希表实现的。显然可以为指针计算散列函数,但不能为自定义类型计算。
请你告诉我,如何重载 qHash
我的程序编译的功能?我已经阅读了一些关于哈希表工作原理的基本信息,但我对这个主题缺乏信心。
我试图了解 QLinkedList<T>::iterator
的内部工作原理.它似乎与 QVector<T>::iterator
非常相似.它只是持有指向链表中节点的指针,而不是指向项目本身的指针。
class iterator
{
public:
...
Node *i;
...
};
所以我尝试以这种方式定义函数:
uint qHash(QLinkedList<MyType>::iterator it)
{
return qHash(it.i);
}
程序已编译,但我对我的解决方案没有信心。我应该如何正确地重载 qHash
功能?
最佳答案
你已经做得很好了。哈希函数的基本规则是:
x = y
则 hash(x) = hash(y)
。x != y
则 hash(x) != hash(y)
(尽可能频繁)。这不是一个严格的规则,但遵循得越好,哈希表的性能就越好。理想情况下,输出将随机出现。你的方法是可行的,因为如果两个迭代器 ia
和 ib
相等(指的是同一个节点),它们的内部指针 ia.i
和 ib.i
将是相等的。这适用于规则 1。然后您在这些指针上使用内置的哈希函数; Qt 会为您处理规则 2。
干杯!
关于c++ - 如何创建迭代器的 QSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12930828/
有没有办法设置 QSettings 存储的实际默认路径(有或没有文件名),并防止 QSettings 将组织名称等内容附加到该路径?这要求 QSettings 的进一步使用保持不变并且不知道设置存储路
你好,我有一个由应用程序生成的 Mac OS X plist 文件 (QSetting::NativeFormat),现在我想在不支持它的基于 Linux 的操作系统上使用这个 plist 文件。所以
Qt 错误报告链接:QTBUG-53313 从 Qt 5.5 迁移到 Qt 5.6 会出现一个问题 QSettings它在系统范围内找不到 QSettings 配置文件。在下面的 main.cpp 中
我程序里的设置挺多的,大概有3000个。它们不应该在程序开始时立即阅读,而是在需要时在程序的 10 个不同位置阅读。我想知道执行此操作的在性能/内存使用方面最有效的方法是什么: 1 始终打开一个“全局
我想用QSettings保存高分,但它不能正常工作。我在 2 个不同的文件中保存和读取这些值。 这是我负责将值添加到数组中的代码: QSettings settings; settings.begin
我从某个位置上传文件,然后下一次上传必须指向上次上传的位置。 我怎样才能使用 QSettings 来实现? ? 最佳答案 在使用 QSettings 之前,我建议在您的 main() 中设置一些有关您
我有 ini 格式的 QSettings 对象。 当我在 ini 文件中写入 settings.beginGroup("GENERAL") 时,我看到以下内容: [%常规] 为什么会这样? 最佳答案
我正在尝试为 QSettings 创建自定义格式,但无法从存储中读取它。 在下面的代码中,如果我运行 settings.setValue("test", 123") ,它会正确调用 write 函数并
我正在使用QSettings在Windows中将某些数据存储为ini文件。 我想查看ini文件,但我不知道ini文件的位置。 这是我的代码: QSettings *set = new QSetting
我使用 QSettings 来编辑 .desktop 菜单条目。我这样做: dfile 是一个 QString - 绝对文件路径 QSettings set(dfile, QSettings::Ini
我正在尝试在我的代码中使用 QSettings,但它无法正常工作。我的代码是: In Mainwindow.h QSettings settings (我已经在所有setOrganizationNam
我正在使用非图形用户界面产品的 Qsettings 将其设置存储到 xml 文件中。这是作为一个库编写的,可在 C、C++ 程序中使用。每个产品将有 1 个 xml 文件。每个产品可能有多个子产品,它
我想知道为什么这段基于虚假公司名称和应用程序名称创建 Qt 设置实例的代码不起作用。 这里是mainwindow.h,还有一个main.cpp,还有mainwindow.cpp,一个.pro文件,.u
我正在使用 Qsetting 来存储上次使用的值。我的代码只适用于一个领域。这意味着当我为第二轮应用相同的逻辑时它只工作一次,但它不会那样做。 文件io.cpp #include "fileio.h"
Does Qt has something like QSettings, but for local scopes? 我正在寻找具有相同方法但不特定于 APPLICATION 的数据结构。 我的意思
QSettings settings("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",QSettings::Nati
有没有办法使用 QSettings 为每个键存储多个值,并将其存储在人类可读(无二进制文件).ini 文件中? 可能看起来像: key_1=value_1,value2 key_2=value_1 .
我正在尝试为我的 Qt 应用程序实现应用程序设置。我正在使用 QSettings ,像这样创建了我的类的实例 settings = new QSettings(qApp->organizationNa
我正在使用 QSettings 编写一个 .ini 文件,它将作为我的应用程序配置文件。只有一个问题: QSettings 将组名 [General] 添加到文件的顶部。 我这样设置文件: QSett
我编写了一个简单的应用程序来使用 QSettings。谁能告诉我我在这里做错了什么.. 主窗口.h class MainWindow : public QMainWindow { Q_OBJE
我是一名优秀的程序员,十分优秀!