如何散列std :: regex?

时间:2017-01-29 18:49:42

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

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

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

更确切地说:我想计算

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

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

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

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

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