std :: hash <string>

时间:2019-03-10 11:11:37

标签: c++ hash time-complexity std

什么时间复杂?

 std::hash <string>

在这里?

#include <iostream>
int main(){
std::string a = "abc";
std::hash<std::string> hsh;
std::cout<<hsh(a);
return 0;}

它是O(a.size()),所以每个符号都散列吗?

1 个答案:

答案 0 :(得分:2)

我找不到对此的任何一般性答案,但是看看Visual Studio 2017中的MSVC实现,它看起来像这样:

_NODISCARD inline size_t _Fnv1a_append_bytes(size_t _Val,
const unsigned char * const _First, const size_t _Count) noexcept
{   // accumulate range [_First, _First + _Count) into partial FNV-1a hash _Val
for (size_t _Idx = 0; _Idx < _Count; ++_Idx)
    {
    _Val ^= static_cast<size_t>(_First[_Idx]);
    _Val *= _FNV_prime;
    }

return (_Val);
}

是O(N)。

除了遍历字符串中的每个字符外,我没有其他选择来计算有意义的哈希。因此,我的假设是它将始终为O(N)。