2012-08-30 20 views

回答

4

您可以在C++标准here中找到定义的特化列表。但是你不需要知道这些,编译器会告诉你是否需要提供你自己的散列函数。

+1

似乎G ++(4.6.2)要求'operator()'是一个const成员函数。这个答案中的链接没有提到这一点。这是标准中规定的吗? – updogliu

+0

我在** 17.6.3.4散列要求**中看不到这样的要求。我将在稍后使用新版本的g ++进行检查。 – juanchopanza

+0

@updogliu检查4.6.3和4.8,你是对的,它需要一个const操作符()。 – juanchopanza

1

C++标准将包含这样一个列表。而不是挖起来,这里的部分清单:

  • 原始类型

  • 指针类型; shared_ptr<T>unique_ptr<T, D>

  • std::basic_string<...>专长。

  • std::thread:id

  • std::type_index

  • std::error_code

最重要的是,pairtuplearray包含。关键的作曲家功能hash_combine未包含在标准库中,但您应该随时采用Boost的作品。

+0

此外'std :: string'(和'std::(w/u16/u32)string')也应该在那里。 –

+0

我知道你说这是一个*“部分列表”*,但只是为了完整性,'std :: shared_ptr'和'std :: unique_ptr'也是专用的。 –

相关问题