gpt4 book ai didi

c++ - QPair迭代的QHash

转载 作者:行者123 更新时间:2023-11-30 03:44:28 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com