【问题标题】:calling the (default) hash function for a vector为向量调用(默认)散列函数
【发布时间】:2014-05-24 03:33:48
【问题描述】:

我正在尝试获取不同类型对象的哈希值,例如字符串和向量。

下面的代码就ok了……

  std::string data = std::string("abc");
  std::cout << std::hash<std::string>()(data) << std::endl;

...但不是这个,虽然我“只是”用 vector 类型替换了 string 类型。

  std::vector<int> data( {1,2,3} );
  std::cout << std::hash<std::vector<int> >()(data) << std::endl;

g++ -std=gnu+11 说:

  invalid use of incomplete type 'struct std::hash<std::vector<int> >'

...为什么?

【问题讨论】:

  • 对于std::vector&lt;int&gt; 类型没有std::hash&lt;&gt; 的特化。错误告诉你这一点。 有一个 std::string (显然)。请参阅the documentation for std::hash&lt;&gt;,了解哪些基本类型和库类型具有库提供的专业化列表。
  • 感谢您对错误的含义的解释以及有用的链接。

标签: c++ hash syntax


【解决方案1】:

您的编译器似乎没有为std::vector 实现std::hash

根据MSDN,Visual Studio 仅对标量类型和某些字符串类型实现此功能。根据cpluplus.com,编译器只需要为简单类型实现此功能,而不是所有类型。

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 2011-05-15
  • 1970-01-01
  • 2013-12-28
  • 2014-07-14
  • 1970-01-01
相关资源
最近更新 更多