我认为选择这种设计是有原因的。 Boost seems to have an implementation for it,因此应该可以将向量用作哈希表键。应用于数组的哈希函数是否有任何理论上的属性,使其更易于发生冲突或其他不良行为?
您会注意到Boost does n't实际上具有扩展名,可以接受vector<T>
作为键-而是具有扩展名,可让您使用任何Iterable
-并且它仅以可迭代内容的功能...
这可能不希望,取决于:
boost::hash_range
似乎为O(n)
并不意味着底层可迭代对象将不需要5分钟就可以为每个调用返回所有可哈希值...boost::hash_range
或boost::hash_combine
与两个不同但等效]的对象之一一起使用[unordered_set
对象将产生不同的哈希码,尽管它们的值相等。vector<uint8_t>
代表数据缓冲区,或者queue<SomeEnum>
其中SomeEnum : uint8_t
代表值队列)应该具有相同的hahs代码...或没有。I suspect STL背后的团队不喜欢上面描述的上下文“ if”这么多,这意味着提供默认行为并不明智,因此他们要求您始终对任意对象的哈希生成更加明确(此外,如果您想要Boost的行为,则首先使用Boost-并不是Boost与STL竞争)。 也请参见此质量检查:C++ unordered_map using a custom class type as the key