- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
QHash<QPair<QString N_id, QString A_id>, QString name> info
我有这个 QHash ,我有一个特定索引的 N_id 和名称的值,我怎样才能获得相应的 A_id 的值。我正在尝试使用 STL 样式的迭代器。如果需要,我可以将 QHash 更改为 QMap,但我不能使用:
QHash<QPair<QString N_id, QString name>, QString A_id>
编辑:在我的例子中,N_id 和 A_id 一起构成了一个唯一的键。
最佳答案
我认为这里的主要问题是 QHash
是一个散列表,它通过对键进行散列来查找值。因此,它需要完成键才能查找值;一个“部分”键是不够的——那时没有具体的对象可以散列。 map 也会出现类似的问题:要导航 BST,您需要完整的对象才能进行比较和左/右决策。因此,如果不回到绘图板并修改您的方法,我会说,维护一个向后映射,无论是 QHash
还是 QMap
,与映射name
-> pair(n_id, a_id)
。缺点是您必须使两者保持同步。
但是,使用现有的数据结构,我将执行如下查询:
#include <algorithm>
QHash<QPair<QString, QString>, QString> info;
QString a_n_id {/*...*/}; // the target N_id
QString a_name {/*...*/}; // the target name
/* ... */
const auto keyList = info.keys(a_name); // QList<QPair<QString, QString> >
std::find_if(keyList.begin(), keyList.end(),
[&](decltype(info)::key_type& key) { return key.first == a_n_id; });
参见 this question如果 decltype(info)::value_type
拒绝在 Microsoft VS 上构建。
这当然是线性的,因为正如我已经说过的,哈希需要完整的对象才能执行查找,因此在这种情况下我们不能使用对数复杂度查找。
关于c++ - QPair迭代的QHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432452/
我有以下问题:我想通过 TCP 传输数据,并为此编写了一个函数。为了获得最大的可重用性,函数模板是 f(QPair data) .第一个值(又名 QString )被接收器用作目标地址,第二个包含数据
QPair 很好,但如果我需要 3 个项目怎么办?我应该只创建一个结构,还是 Qt 已经涵盖了我? 最佳答案 作为QTBUG-22441表明,开发人员无意添加 std::tuple 的 Qt 模拟。
我想制作一个数据结构来通过两种方式访问字符串: 通过ID访问 按名称访问 我的第一个想法是为每种方法使用两个映射,但这会导致数据重复: QMap accessById; QMap accessBy
我想存储一个 QPair 和 QString,或者换句话说,我想为每个索引存储三个值(int、int、String)。为此,我选择了一个 QMap,结果还不错,其中 QString 作为键,QPair
为了避免大量不必要的复制,我试图将 unique_ptr 存储在一对列表中。我正在使用一个简单的类 Test,它带有一个 QString; 我正在使用 VS2013 和 Qt5.4 using std
警告: qvector.h(509): warning C4127: conditional expression is constant (main.cpp) qvector.h(506) : wh
我有一个整数对列表,我想使用 Qt Framework 以持久的方式存储它们。 我想到了使用 QList>作为列表的类型,并使用 QSettings 将它们存储在 .ini 文件中. 不幸的是,函数Q
是否可以写和初始化 QMap> 在 Qt 5.10 中? 例如我想这样做 QMap> ee{"MAC", 0,0,}; // string, section 0, line 0 当我提供 Mac 时
我是一名优秀的程序员,十分优秀!