hash <std :: string>与hash <std :: string_view>

时间:2019-03-21 16:53:03

标签: c++ c++17

C ++ 17引入了hash<string_view>。在编写自己的自定义哈希值时,我想重用字符串哈希的STL实现。

std::hash<std::string>()("Hello, world")std::hash<std::string_view>()("Hello, world")慢吗?一样吗?

我什么时候想使用std::hash<std::string>()

2 个答案:

答案 0 :(得分:3)

  

std::hash<std::string>()("Hello, world")std::hash<std::string_view>()("Hello, world")慢吗?

是的

前者速度较慢,因为创建std::string比创建std::string_view慢。

  

我什么时候想使用std::hash<std::string>()

当您有一个std::string对象并且要从中计算哈希值时。

答案 1 :(得分:1)

std::hash<std::string>std::string const&作为其operator()的参数。如果您有std::string,并且正在对它们进行哈希处理,那么这就是您想要的。如果您使用hash<string_view>,则必须将std::string转换为std::string_view,这要花一些钱(虽然不多,但确实存在)。

如果您的数据集不仅包含std::string,还包含c字符串,那么hash<string_view>可能更好。将c字符串转换为std::string可能需要动态分配内存,因此,如果可以避免在正常情况下赢得胜利,就可以这样做。由于std::string和c字符串的混合以及c字符串的大小很重要,因此这需要进行概要分析,因为SSO(短字符串优化)可能使std::hash<std::string>是更好的选择。