以下代码snippet可以对字符串对象进行哈希值。我想获取二进制字符串的哈希值(指针和长度)。我知道我可以用指针和长度形成一个字符串对象,但是仅为此形成一个字符串会产生额外的开销。想知道是否可以使用带有两个参数的 std 哈希函数:指针和长度。
谢谢。
#include <iostream>
#include <functional>
#include <string>
int main()
{
std::string str = "Meet the new boss...";
std::hash<std::string> hash_fn;
std::size_t str_hash = hash_fn(str);
std::cout << str_hash << '\n';
}
最佳答案
我在堆栈溢出中找到了这篇文章,它表明底层哈希函数实际上是字符串内部缓冲区中字节的函数:
What is the default hash function used in C++ std::unordered_map?
但是,与其通过调用标准库中的内部函数来冒未定义行为的风险,为什么不问这样一个问题:“创建 std::string
会损失多少性能”?鉴于您始终可以创建这样一个字符串作为 static const
(零开销),我想知道您实际上要保存什么?
关于c++ - 快速访问哈希函数(不使用字符串对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32158565/