C ++的“map”容器是否对字符串的连续子串应用Rabin-Karp算法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++的“map”容器是否对字符串的连续子串应用Rabin-Karp算法?相关的知识,希望对你有一定的参考价值。

我正在研究代码抄袭检测方法。我需要使用指纹算法来实现这种方法。指纹算法将源代码的所有子字符串放入哈希表。 (所有子串都具有相同的长度。)出于优化的目的,建议在将指纹放入哈希表时使用Rabin-Karp算法。

例如;对于string = abcdef和length = 5,我们应该将abcde和bcdef子串放到哈希表中。由于字符串的散列需要对字符串的每个字符应用数学运算,因此对于许多子字符串来说它将是昂贵的。

Rabin-Karp算法利用连续的子串。它计算第一个指纹的哈希值。对于其余的子串,它使用前一个子串。

C ++的“map”容器是否会自动将此算法应用于后台的连续子串?或者我应该编写自己的哈希库?

答案

std :: unordered_map http://www.cplusplus.com/reference/unordered_map/unordered_map/的构造函数需要一个哈希。

来自std :: hash(https://en.cppreference.com/w/cpp/utility/hash)上的在线文档:

实际的散列函数是依赖于实现的,除了上面指定的那些之外,不需要满足任何其他质量标准。

以上是关于C ++的“map”容器是否对字符串的连续子串应用Rabin-Karp算法?的主要内容,如果未能解决你的问题,请参考以下文章

[C/C++]详解STL容器9-基于红黑树模拟实现map和set

[C/C++]详解STL容器9-基于红黑树模拟实现map和set

[C/C++]详解STL容器9-基于红黑树模拟实现map和set

[C/C++]详解STL容器9-基于红黑树模拟实现map和set

C++map函数的用法

关于set/map 等容器对string类的时间性能指标对比