我需要对一个具有 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/