可以使用迭代器排序的数据结构,以保持插入顺序

1879年

这是一个非常笼统的问题,我会尽力弄清楚。假设我有一些对象集合,为简单起见,使它们成为整数。现在,我想创建一个将这些整数表示为某种数据结构的类。在这个课上我想实现

  • 排序功能,根据定义的排序逻辑对集合进行排序

  • 可迭代的接口,迭代器按插入顺序遍历

即使我以未排序的顺序添加整数,我如何做到这一点,例如

someCollection.add(1);
someCollection.add(3);
someCollection.add(2);

然后打电话

Collections.sort(someSortingLogic);

在对集合进行排序之后,迭代器仍然按插入顺序遍历。我是否可以为此目的使用特定的数据结构,或者是手动跟踪按哪些顺序插入了哪些元素的情况,或者是我想到的其他情况?

非常感谢!

埃德温·巴克

通常,要解决这样的问题,您需要为值维护两个索引。这些索引之一可能包含实际值,两个索引可能包含实际值,或者实际值存储在其他位置。

然后,当您要遍历排序顺序时,可以将排序索引用于值,而当需要插入顺序时,可以将插入索引用于值。

索引可以像包含值的数组一样简单。自然地,您不能将两个不同的值存储到数组的一个点中,因此一种简单的解决方案是将两个数组包装在一个Object中,这样调用Object的sort()方法将对一个数组进行排序,而插入顺序数组保持不变。

先进的数据结构利用了先进的技术,但它们基本上都归结为维护两个顺序,即插入顺序和排序顺序。

public class SomeCollection {
   public void add(int value) {
      insertArray = expandIfNeeded(insertArray);
      insertArray[insertIndex++] = value;
      sortArray = expandIfNeeded(sortArray);
      sortArray[sortIndex++] = value;
      sort(sortArray);
   }
   ...
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以保持插入顺序,过滤出重复元素并轻松删除第一个元素的数据结构?

迭代器可以用于什么数据结构?

我应该使用哪种数据结构来支持键值映射,反向迭代和插入顺序?

类似于插入顺序的数据结构?

一种数据结构,使元素保持排序顺序,支持快速插入和计算连续元素之间的最大差异

Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?

保持多对多项目顺序的数据结构

有效地在列表(或其他数据结构)中插入多个元素并保持它们的顺序

像数据结构那样按顺序排序的字典字典

Python数据结构按字母顺序排序列表

数据结构从列表到集合的转换顺序排序

收集数据结构以保持项目排序

插入排序的合适数据结构是什么?

我可以使用什么数据结构来计算国家代码的出现次数?

从理论上讲,具有共享内存的树可以使用什么数据结构?

如何使用返回可变引用的迭代器创建自己的数据结构?

用于2个分离的数据结构的迭代器

树数据结构的迭代器有什么问题?

稀疏插入的数据结构

转换嵌套的数据结构以使用类对象

API的数据结构以使用Google Cloud消息传递

为什么STL容器可以使用const迭代器插入

我可以使用迭代器吗?

在保持数据结构的同时使用`group_split`吗?

我可以使用什么强类型数据结构来保存具有不同形状的多个RecordSet的集合

我们可以使用Union-Find数据结构检测有向图中的周期吗?

具有快速排序插入,排序删除和查找的数据结构

最佳数据结构,可快速检索,更新和保持顺序

是否可以使用csv.DictReader保持列顺序?