gpt4 book ai didi

C++:将 reg_iterator 复制到一个 vector 以便 sort() 和 unique()?

转载 作者:行者123 更新时间:2023-12-03 07:00:39 26 4
gpt4 key购买 nike

我的 regex_iterator 中有大约一百万个条目,并且会有重复项。为了让我在 regex_iterator 上 sort() 和 unique() (它本身不需要很多时间),我需要将它复制到一个需要很多时间(大约 20 秒)的 vector 中。我的代码对文件内容(字符串 fcontent)应用正则表达式,并使用 push_back 将匹配项一一添加到 vector 中。

vector<string> vthread;
std::regex e(R"(\{\w+:\d\})", std::regex::ECMAScript|std::regex::icase);
std::regex_iterator<std::string::iterator> rit(fcontent.begin(), fcontent.end(), e);
std::regex_iterator<std::string::iterator> rend;
while (rit != rend) {
vthread.push_back(rit->str());
++rit;
}
std::sort(vthread.begin(),vthread.end());
vthread.erase(unique(vthread.begin(),vthread.end()),vthread.end());
上面的 push_back 更消耗 CPU 和耗时。寻找替代和有效的方法。有人可以帮忙吗?

最佳答案

一个 regex_iterator很懒。施工rit只找到第一个匹配项和 ++rit查找后续匹配项。我怀疑 push_back是瓶颈。
调用 rit->str()正在分配从 fcontent 复制的新字符串,如果您使用 rit->position() 可以避免这种情况和 rit->length()建一个 std::string_view (C++17) 代替。

关于C++:将 reg_iterator 复制到一个 vector 以便 sort() 和 unique()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64098375/

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