考虑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。
答案 0 :(得分:1)
您不能在unordered_map
内使用树,即使只是在一个桶中。 unordered_map
的界面根本不允许它。关键类型只需要具有可比性,仅此而已。这就是为什么它被称为“无序”地图;因为没有特定的元素排序。要使用某种二叉树,需要严格的弱排序,这不是必需的。
如果您想使用unordered_map
的变体,您可以。但它不是标准定义的unordered_map
。