C ++ 17引入了hash<string_view>
。在编写自己的自定义哈希值时,我想重用字符串哈希的STL实现。
std::hash<std::string>()("Hello, world")
比std::hash<std::string_view>()("Hello, world")
慢吗?一样吗?
我什么时候想使用std::hash<std::string>()
?
答案 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>
是更好的选择。