c++ - 如何散列 std::regex?

标签 c++ regex c++11 hash stl

我需要对一个具有 std::regex 作为成员的类进行哈希处理,该成员是从类构造函数中的字符串初始化的。

为了获得该类的良好哈希值,我可以将模式字符串的哈希值存储在构造函数中,或者(首选方法)计算正则表达式本身的哈希值。这可能吗(最好没有提升)?

更准确地说:我想计算

std::hash<std::regex>{}(m_regex);

其中 m_regex 的类型为 std::regex,但 std::regex 的模板特化不存在。

非常感谢您的帮助。

最佳答案

无法std::regex 对象进行哈希处理,因为它被假定为具有 internal representation(可能不可移植)。请记住 std::regex 对象带有一些 other information 。如果您正在考虑使用用于构造对象(或分配)的正则表达式模式字符串,您仍然不能,因为您无法检索用于构造 std::regex 对象的字符串,因为 it isn't required存储字符串。


一个可能的解决方法是保存用于构造 std::regex 对象的字符串和 flags,然后在需要时构造一个正则表达式对象。

关于c++ - 如何散列 std::regex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924642/

相关文章:

c++ - 打印/阅读时间时的奇怪行为

c++ - Doxygen 详细描述渗透到简短描述中

c++ - Qt - RegExp 无法正常工作

javascript - 匹配日期格式的正则表达式

c++ - 内联命名空间变量是否具有内部链接?如果不是,为什么下面的代码有效?

c++ - 调用 QDataStream::writeRawData 后 QDataStream 为空

c++ - 重新指定继承的虚拟方法如何使其能够正确消除歧义?

c++ - 编译并运行程序

c++ - 带指针的 bitWrite 函数

regex - 在 Visual Studio Code 中搜索时匹配括号内的字符串