在没有内存分配的情况下在 QHash<QString, DataType> 中搜索 QStringView?

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

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

我可以使用其他一些 Qt 类型来实现类似于 QHash 的功能吗?

std::mapstd::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),而无需将字符串视图移动到字符串中。

类似的技术应该适用于 QHash

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

有了它,你就可以拥有

QHash<QTransparentKey<QString>, DataType>

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