如何实现std :: map的排序?

史蒂夫·M

我们从多个来源可以看到std :: map是使用红黑树实现的。据我了解,这些类型的数据结构不会以任何特定顺序保存其元素,而只是保持BST属性和高度平衡要求。

那么map :: begin是恒定时间又如何,并且我们能够遍历有序序列呢?

米卡尔·佩尔森(Mikael Persson)

std::map内部维护BST的前提开始(标准并没有严格要求BST,但是大多数库可能会这样做,就像红黑树一样)。

在BST中,要找到最小的元素,只需跟随左分支,直到到达叶子O(log(N))。但是,如果要在恒定时间内交付“ begin()”迭代器,仅在内部跟踪最小的元素就非常简单。每次插入导致最小的元素更改时,就进行更新,仅此而已。当然,这是内存开销,但是这是一个折衷。

可能还有其他方法可以选出最小的元素(例如,使根节点故意不平衡)。无论哪种方式,都不难。

要遍历“有序”序列,您只需对树进行有序遍历。从最左边的叶节点开始,您可以(向上),(右侧),(向上,向上),(右侧)等等。。。等等。这是一组简单的规则,易于实现,请看不久前的一个简单的BST有序迭代器的快速实现在进行有序遍历时,您将以正确的顺序访问从最小到最大的每个节点。换句话说,它只是给您一种幻想,即“数组”已排序,但实际上,遍历使它看起来像已排序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何实现std :: map的排序?

来自分类Dev

如何首先按值然后按键对std :: map排序?

来自分类Dev

如何按值的升序对 std::map 进行排序?

来自分类Dev

std :: partition快速排序实现

来自分类Dev

使用lambda对std :: map进行排序

来自分类Dev

如何实现选择排序?

来自分类Dev

如何实现特定的排序?

来自分类Dev

如何在.map之后排序?

来自分类Dev

如何排序List <Map <String,dynamic >>?

来自分类Dev

如何排序List <Map <String,dynamic >>?

来自分类Dev

如何对Map <String,Map <String,int >> Dart进行排序

来自分类Dev

如何实现与std :: unordered_map一起使用的CString哈希函数?

来自分类Dev

如何使用for()实现.map()?

来自分类Dev

如何使用for()实现.map()?

来自分类Dev

std :: map的排序顺序取决于输入值

来自分类Dev

按key的绝对值排序std :: map

来自分类Dev

std :: map按值大小排序(set <int>)

来自分类Dev

关于严格排序,std :: map的compare参数有什么要求?

来自分类Dev

Tensorflow,如何实现排序层

来自分类Dev

如何实现排序列表

来自分类Dev

如何实现对DAO方法的排序?

来自分类Dev

如何按属性值对coffeescript Map对象排序?

来自分类常见问题

如何通过Map [string] int的值对其排序?

来自分类Dev

android-如何排序List <Map <String,String >>

来自分类Dev

如何从Map.keys()中获取排序后的数组

来自分类Dev

如何按值而不是键对Map对象数据排序?

来自分类Dev

如何通过ABC对名称的javascript.map数组进行排序

来自分类Dev

如何按属性值对coffeescript Map对象排序?

来自分类Dev

Hadoop Map Reduce-如何将分组与排序分开?