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

Does "map" container of C++ apply Rabin-Karp algorithm for consecutive substrings of a string?

我正在研究一种代码抄袭检测方法。我需要为此方法使用 fingerprint 算法。指纹算法将源代码的所有子字符串放入一个散列table。 (所有子字符串长度相同。)为了优化,建议在将指纹放入哈希table时使用Rabin-Karp算法。

例如;对于字符串 = abcdef 和长度 = 5,我们应该输入 abcdebcdef 散列 table 的子字符串。由于字符串的散列需要对字符串的每个字符应用数学运算,因此对于大量子字符串来说,这将是昂贵的。

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) 上的在线文档:

The actual hash functions are implementation-dependent and are not required to fulfill any other quality criteria except those specified above.