如何散列unordered_map?

Dra*_*rax 6 c++ hash boost unordered-map

boost::hash 具有大多数内置类型(包括容器)的散列函数.

但正如boost::hash_range函数描述中所述,范围的哈希算法

对元素的顺序很敏感,因此将它与无序容器一起使用是不合适的

因而,没有boost::hash专业化std::unordered_map,也没有boost::unordered_map.


问题是:

如果unordered_map没有从头开始重新实现哈希算法,是否有"简单而有效"的方法来哈希?

Meh*_*dad 6

这里的问题是,不能保证物品甚至在它们之间订购.
因此,对项目进行排序可能不适用于任意无序容器.你有2个选择:

  1. 只是对所有单个元素的哈希进行异或.这是最快的.
  2. 首先对容器的哈希值进行排序,然后对它们进行哈希处理.这可能会导致更好的哈希值.

  • @StefanoBuora:因此我说第二个可能会产生更好的哈希值。 (2认同)