为什么 Data.Map 中的键被限制为 class Ord?
Why is the key in Data.Map constrained to class Ord?
假设我定义了这样一个简单类型:
data Object = House | Table | Book
为了能够将 Object
用作映射的键,类型必须从 Eq
和 Ord
:
派生
data Object = House | Table | Book deriving (Eq, Ord)
此限制的原因是什么?为什么地图的键需要可排序?
Data.Map
为大多数操作(插入、查找、删除...)提供 O(log N) 复杂度。它可以做到这一点,因为它在内部使用平衡搜索树。反过来,这需要键的排序关系,因此需要 Ord
约束。 Eq
是 Ord
的超类,因此也必须提供。
只有 Eq
我们不能像查找一样高效,因为在这种情况下我们能做的最好的事情就是执行线性搜索,即 O(N)。
没有 Eq
,我们根本无法执行查找,因为我们无法将已插入的键与要查找的键进行比较。
假设我定义了这样一个简单类型:
data Object = House | Table | Book
为了能够将 Object
用作映射的键,类型必须从 Eq
和 Ord
:
data Object = House | Table | Book deriving (Eq, Ord)
此限制的原因是什么?为什么地图的键需要可排序?
Data.Map
为大多数操作(插入、查找、删除...)提供 O(log N) 复杂度。它可以做到这一点,因为它在内部使用平衡搜索树。反过来,这需要键的排序关系,因此需要 Ord
约束。 Eq
是 Ord
的超类,因此也必须提供。
只有 Eq
我们不能像查找一样高效,因为在这种情况下我们能做的最好的事情就是执行线性搜索,即 O(N)。
没有 Eq
,我们根本无法执行查找,因为我们无法将已插入的键与要查找的键进行比较。