24得票2回答
为什么std::hash是一个结构而不是一个函数?

标准库使用模板结构实现std::hash,并对不同类型进行专门化。 使用方法如下:#include <iostream> #include <functional> int main() { std::hash<int> hasher; s...

20得票3回答
能否使用std::hash来哈希函数指针?

C++11中的std::hash类型能否用于哈希函数指针?已定义了一个hash部分特化。 template <typename T> struct hash<T*>; 但是,由于在C++中函数指针与其他指针类型不同(例如,它们无法转换为void*),我不确定是否可...

18得票3回答
为什么std::hash<int>似乎是一个恒等函数

#include &lt;iostream&gt; int main() { std::hash&lt;int&gt; hash_f; std::cout &lt;&lt; hash_f(0) &lt;&lt; std::endl; std::cout &lt;&lt...

18得票5回答
意外与std::hash的冲突

我知道将无限数量的字符串哈希成32位整数必定会产生冲突,但我希望哈希函数能够提供一些良好的分布。 这两个字符串具有相同的哈希值,这不奇怪吗?size_t hash0 = std::hash&lt;std::string&gt;()("generated_id_0"); size_t hash...

18得票3回答
在std::unordered_map中使用QString作为键

我试图将 QString 作为 std::unordered_map 中的键,但是我收到了以下错误: error C2280: 'std::hash&lt;_Kty>::hash(const std::hash&lt;_Kty> &amp;)': 尝试引用已删除的函数 我无法切换到...

16得票2回答
C++11:为什么有些正则类型不应该有`std::hash`专门化?

在这里,“Regular Type”是指Stepanov在《编程元素》中的定义,基本上是指有相等概念的对象,它们的副本之间比较相等。 因此,当你有一个“Regular Type”T,并且相等关系是可传递的(a == b &amp;&amp; b == c =&gt; a == c),你可以定...

12得票1回答
为什么std::hash没有针对std::reference_wrapper进行专门化处理?

我原以为这已经被实现了,但是在我的标准库实现(gcc-4.8.2)中找不到。为什么std::hash没有专门为std::reference_wrapper进行特化?#pragma once #include &lt;functional&gt; namespace std { te...

11得票2回答
为什么std::hash不是一个重载函数?

我猜测 std::hash 被定义为模板结构体是为了避免在重载函数解析期间进行的隐式类型转换。这样说是正确的吗? 我的意思是,我更喜欢这样写:std::string s; size_t hash = std::hash(s); 而不是std::string s; size_t hash = s...

11得票3回答
为什么 std::hash<T> 没有针对 char* 进行特化?

为什么C++标准没有规定std::hash&lt;T&gt;专门针对char*、const char*、unsigned char*、const unsigned char*等类型进行特化?即,它会对C字符串内容进行哈希,直到遇到终止空字符。 在std命名空间中注入自己的特化是否会有任何危害?

10得票3回答
std::hash是否保证在stdlib发行版中是相同的?

如果我使用libstdc++进行了std::hash,然后在即将推出的C++11 VS 2012库上进行了一次,它们是否匹配? 我认为哈希实现不是C++规范的一部分,可能因发行版而异?