繁体   English   中英

在 QHash 中搜索 QStringView<qstring, datatype> 没有 memory 分配?</qstring,>

[英]search QStringView in QHash<QString, DataType> without memory allocation?

解析文本数据后,我得到了QStringView 我需要搜索它是否存在于QHash<QString, DataType>类型的变量中。 没有QStringViewQString的对话是否有可能,换句话说,是否有可能没有分配?

我可以使用类似于QHash功能的其他Qt类型吗?

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

由于QHash不支持您遇到麻烦。

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

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

在非 Qt C++ 我可能会做

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

然后实现一个 hash function 和进行正确交叉类型检查的相等性。

然后

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

将支持bob.find(""sv)而无需将字符串视图移动到字符串中。

类似的技术应该适用于QHash

甚至可以进一步 go 并编写QTransparentKey<T> ,它以T兼容的方式存储T或 function 指针,实现==hash 然后抛出一个类型擦除构造函数。

有了它,你可以拥有

QHash<QTransparentKey<QString>, DataType>

请注意不要使用实际的字符串视图创建键条目,这很容易做到并导致段错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM