std::search 中使用啥算法?

Posted

技术标签:

【中文标题】std::search 中使用啥算法?【英文标题】:What algorithm is used in std::search?std::search 中使用什么算法? 【发布时间】:2012-02-27 15:42:15 【问题描述】:

有许多字符串匹配算法可用于在大文本中查找模式(字符串),如 Boyer-Moore、Aho-Corasick 等。

使用哪种字符串匹配算法在C++中实现std::search函数?

【问题讨论】:

@Mr.Anubis- 我认为 Adban 是在谈论 std::search 算法,它在另一个任意序列中搜索任意序列。 @templatetypedef 抱歉,我只是想为什么不使用专门为字符串制作的std::string::find 【参考方案1】:

根据 C++03 ISO 标准,§25.1.9/3,std::search 的复杂度为

复杂度:最多 (last1 - first1) * (last2 - first2) 应用对应谓词

这是实现该算法的唯一要求。 ISO 规范没有指定这里应该使用哪种算法,它完全依赖于实现。这些时间界限允许使用朴素的序列搜索算法Knuth-Morris-Pratt、Boyer-Moore 和Rabin-Karp。要知道正在使用哪个,您可能应该提取您正在使用的标准库版本的文档。也就是说,你不能指望它是便携的。我的猜测是大多数实现只使用朴素匹配算法,因为在实践中通常不会出现最坏的情况。

希望这会有所帮助!

【讨论】:

以上是关于std::search 中使用啥算法?的主要内容,如果未能解决你的问题,请参考以下文章

std::regex_match 和 std::regex_search 之间的区别?

使用范围参数覆盖的 std::regex_search 无法编译 [重复]

如何在 std::binary_search 中设置针类型

我在哪里可以获得“有用的”C++ 二分搜索算法?

indexOf() 和 search() 有啥区别?

BOSS 和 Yahoo Web Search API 有啥区别?