当前位置: 首页 > 知识库问答 >
问题:

在QHash中搜索QStringView而不分配内存?

广绪
2023-03-14

在解析文本数据之后,我得到了QStringView。并且我需要搜索它是否存在于qhash 类型的变量中。没有QStringViewQString的会话,换句话说,没有分配是否可能?

我是否可以使用其他qt类型,并具有类似于qhash的功能?

共有1个答案

晁英彦
2023-03-14

有一种称为“透明映射”的技术,std::map支持这种技术,但std::unordered_mapqhash不支持这种技术。透明映射允许使用非键类型来查找元素,只要它们支持==并且它们等效地哈希。

因为qhash不支持您遇到麻烦。

没有QString构造函数允许它不将字节复制到QString中。

您可以将qhash更改为不同类型的映射。由于它不透明,该类型必须在运行时知道它是否拥有。

在非QT的情况下,C++可能会做

using stringish = std::variant<std::string, std::string_view>;

然后实现一个哈希函数和平等来进行正确的交叉类型检查。

然后

std::unordered_map<stringish, DataType, myHash, myEqual> bob

将支持bob.find(“”sv)而不必将string视图移动到string中。

类似的技术应该适用于qhash

甚至可以进一步编写qtransparentkey ,它存储一个t或函数指针,以兼容t的方式实现==哈希。然后抛出一个类型擦除构造函数。

有了这个,你就可以

QHash<QTransparentKey<QString>, DataType>

只是要注意不要用实际的string视图创建键项,这将很容易实现并导致segfaults。

 类似资料:
  • 问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值

  • 问题内容: 我想知道是否有人有使用Ransack与HABTM关系的经验。我的应用具有与之的habtm关系(术语类似于标签)。这是我正在经历的简化解释: 我有两张照片:照片1和照片2。它们具有以下术语: 照片1:A,B,C 照片2:A,B,D 我建立了一个sacksack表单,并在搜索表单中为所有术语创建了复选框,如下所示: 如果我使用:并且我选择“ A,C”,则结果是照片1和照片2。我只想要照片1

  • 我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术

  • 如何仅在工作区的一个子文件夹中搜索? CTRL SHIFT F在整个工作区中搜索,并且由于它很大,我在不相关的文件夹和文件中获得了太多的命中。

  • 我想通过一个包含EditText和按钮的水平LinearLayout创建一个自定义SearchView。用户在EditText中输入搜索查询。 通常,当我们使用SearchView时,我们 > 通过将可搜索活动配置为在清单意向来声明该活动。 通过使用清单中的meta元素来声明我们的可搜索配置文件。 通过配置 SearchView 启用系统辅助搜索(其中系统将搜索查询传递给可搜索活动、提供语音搜索、

  • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回