gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:22:33 26 4
gpt4 key购买 nike

我有一个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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com