在阅读std::unordered_map使用的std::hash示例时,我注意到,{}正在访问operator()函数。
http://en.cppreference.com/w/cpp/utility/hash
result_type operator()(argument_type const& s) const
{
result_type const h1 ( std::hash<std::string>{}(s.first_name) );
result_type const h2 ( std::hash<std::string>{}(s.last_name) );
return h1 ^ (h2 << 1); // or use boost::hash_combine (see Discussion)
}
这里{}的用法代表什么?
hash不是一个函数,而是一个类,更确切地说是一个函子。因此,必须先创建该类的对象,然后才能调用其操作符()
。
std::hash
std::hash
的实例有一个执行hash的操作符()。
所以
std::哈希
std::hash<std::string>{}(s.first_name);
^ ^ ^
| | call operator() on that instance
type of hasher |
create an instance of that type
问题内容: 从这个问题出发,我很想知道何时 计算 python对象的哈希值? 在某个实例的时间 第一次叫 每次都被调用,或者 我还有其他机会吗? 这可能会根据对象的类型而有所不同吗? 为什么其他整数等于其哈希值呢? 问题答案: 通常可以在每次使用哈希时进行计算,因为您可以很容易地检查一下自己(请参阅下文)。当然,任何特定对象都可以自由缓存其哈希。例如,CPython字符串执行此操作,但元组不执行此
https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?
从原理到应用分析什么是哈希? 一、什么是哈希? 哈希(hash):将任意长度的输入(关键字),通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值,通常哈希值代表了关键字的存储位置。 但是为什么要这样做呢?或者说,哈希是怎样来的呢? 哈希的出现解决了两个问题:存储和搜索。 1. 存储(数据结构):如果在容器中保存对象及其关联的键,并且不用键
嗨,我想知道如果你有你要寻找的对象的Hashcode,是否可以直接访问HashSet的内容,有点像在HashMap中使用Hashcode作为键。 我想它可能会像这样工作: 谢谢 编辑:谢谢你的回答。好的,我知道我可能会稍微推动HashSet的契约,但是对于这个特定的项目,等式完全由hashcode决定,我确信每个hashcode/hashbucket只有一个对象。我非常不愿意使用HashMap的原
问题内容: 我正在阅读Java 1.6 API提供的HashMap类的代码,无法完全理解以下操作的需要(位于put和get方法的主体中): 该方法具有以下主体: 通过对提供的哈希码执行位操作,可以有效地重新计算哈希。即使API声明如下,我也无法理解这样做的必要性: 这很关键,因为HashMap使用2的幂的哈希表,否则哈希表在低位无差异时会遇到冲突。 我确实知道键值参数存储在数据结构数组中,并且该数
也许我没有看到什么或者我忘记了在计算运行时考虑的事情,所以请告诉我。