当前位置: 首页 > 知识库问答 >
问题:

为什么{}用于访问std::哈希中的运算符()?

皇甫雨石
2023-03-14

在阅读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)
}

这里{}的用法代表什么?

共有2个答案

充运浩
2023-03-14

hash不是一个函数,而是一个类,更确切地说是一个函子。因此,必须先创建该类的对象,然后才能调用其操作符()

公羊玉泽
2023-03-14

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的幂的哈希表,否则哈希表在低位无差异时会遇到冲突。 我确实知道键值参数存储在数据结构数组中,并且该数

  • 也许我没有看到什么或者我忘记了在计算运行时考虑的事情,所以请告诉我。