std::unordered_map key 值不能是QString
时间: 2023-08-31 12:09:01 浏览: 273
是的,你是正确的。`std::unordered_map` 的键类型必须是可哈希的,而 `QString` 并没有默认的哈希函数。因此,直接使用 `QString` 作为 `std::unordered_map` 的键是不允许的。
如果你想要在 `std::unordered_map` 中使用 `QString` 作为键,你需要提供一个自定义的哈希函数和相等比较函数。下面是一个示例:
```cpp
struct QStringHash {
std::size_t operator()(const QString& str) const {
return qHash(str);
}
};
struct QStringEqual {
bool operator()(const QString& str1, const QString& str2) const {
return str1 == str2;
}
};
std::unordered_map<QString, bool, QStringHash, QStringEqual> myMap;
```
在这个示例中,我们定义了 `QStringHash` 结构体来提供哈希函数,并定义了 `QStringEqual` 结构体来提供相等比较函数。然后,我们将这两个结构体作为模板参数传递给 `std::unordered_map`。
请注意,我们使用了 `qHash()` 函数来计算 `QString` 的哈希值。这是因为 Qt 提供了一个用于 `QString` 的特殊哈希函数。
使用自定义的哈希函数和相等比较函数后,你就可以在 `std::unordered_map` 中使用 `QString` 作为键了。记得在插入、查找和删除元素时使用正确的键类型和哈希函数。
阅读全文