c++ - 快速访问哈希函数(不使用字符串对象)

标签 c++ hash

以下代码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/

相关文章:

c++ - 将数据从 std::istream 保存到文件的最佳方式

c++ - "Save as"的 SQLite 和大文件的自动保存功能

安卓NDK。 Eclipse 项目属性中没有 C/C++ 部分

c - 关于哈希函数

c++ - c++ 和 boost 库的散列问题

c++ - C++中未设置的 boolean 值的默认值?

c++ - 如何为局部变量分配内存?

multithreading - SHA1 、 SHA-256 、 SHA-512 可以分解为跨多个内核/线程运行吗?

java - 创建独立的哈希函数

c++ - 使用 lambda 做定义哈希函数抛出异常