如何使用树数据结构有效地实现unordered_map?

时间:2012-02-04 14:45:42

标签: c++

考虑unordered_map

template<
    class Key,
    class T,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator< std::pair<const Key, T> >
> class unordered_map;

我知道(a==b)!(a<b) && !(b>a)快,但由于unordered_map不使用std::less<Key>来比较/存储地图中的键,我想知道如何实现通过树数据结构以最有效的方式在同一个桶中读取/存储不同的密钥。看来,任何使用树的实现都无法避免从Key转换为某种定义了operator<()的KeyWrapper。

1 个答案:

答案 0 :(得分:1)

您不能在unordered_map内使用树,即使只是在一个桶中。 unordered_map的界面根本不允许它。关键类型只需要具有可比性,仅此而已。这就是为什么它被称为“无序”地图;因为没有特定的元素排序。要使用某种二叉树,需要严格的弱排序,这不是必需的。

如果您想使用unordered_map的变体,您可以。但它不是标准定义的unordered_map