c++ - 在 cpp 中对 unordered_map 进行正则表达式模式匹配搜索

标签 c++ regex search unordered-map

我有一个unordered_map,它的键和值都是字符串类型。

key 是一个正则表达式。

map 中的元素数量约为 2,50,000。

我必须找到其键(正则表达式)返回与请求中收到的字符串完全匹配的元素。

当我按每个元素遍历 map 时,在最坏的情况下大约需要 10 秒。

我的示例代码:

string string_to_match = "Find my Regex";
for (MyMap::const_iterator it = myMap.begin();
        it != myMap.end(); ++it) {
    //cout << it->first << "\n";
    if (regex_match( string_to_match ,
            regex(it->first,std::regex::ECMAScript | std::regex::icase))) {
        cout << ", " << it->second << "\n ";
        break;
    }
    ++it;
}

有什么办法可以减少花费的时间...

最佳答案

std::regex 对象的构造需要花费大量时间,因为正则表达式输入字符串是在构造期间编译的。因此,请提前构造 std::regex 对象并将它们保存在您选择的容器中。

在预编译的 std::regex 对象上调用 std::regex_match 非常有效。

考虑在构建 std::regex 对象时也传递 std::regex::optimize 标志。这将意味着构建速度更慢,但匹配性能更快。

关于c++ - 在 cpp 中对 unordered_map 进行正则表达式模式匹配搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064222/

相关文章:

ios - 能够按字幕搜索

javascript - 过滤 <td> 元素中带有空格的匹配文本

c++ - 播放wav文件后,是否需要删除缓冲区?

Php 正则表达式字符串需要更多分隔符吗?

python多行正则表达式

用于查找空格、字符串结尾和/或单词边界的 Python 正则表达式

search - 检索与具有 k 个最近邻居的输入树最接近的树?

c++ - 为什么 VERTEX 着色器中的矩阵乘法无法正常工作?

c++ - 什么是长指针?

C++ 打印速度比 C 快得多