到达指定间隔的整数流需要排序
Stream of Integers arriving at specified interval need to look sorted
面试问题:有一个整数流,每隔一段时间(比如每20秒)到达。您将使用哪个STL容器来存储它们,以便整数看起来有序?我的回答是map/set,当没有重复或multimap/multiset时,有重复。有更好的答案吗?
如果您想要保存副本,请使用multiset
。如果您不想保留重复项,请使用set
。
如果它只是每20秒更新一次,那么它可能无关紧要(除非它持续很长时间,以至于整数集变得非常大)。
如果你有更快的数据传入,有一些替代方案可能值得考虑。一种是用一些向量。当数据到达时,把它推到其中一个向量上。当需要按顺序遍历时,对新到达的数据进行排序,并与现有(已经排序的数据)的其他向量合并。这将按顺序给出结果,然后你可以将结果写入另一个向量,并再次开始相同的循环。
这里的最大优点是您处理的是连续数据,而不是单独分配的节点。即使有可能一次使用三个向量,您的总内存使用量也可能与使用set
或multiset
大致相等(甚至可能小于)。
另一种可以考虑的可能性(介于两者之间)是类似B+树的东西。这仍然是一棵树,因此您可以按对数复杂度进行顺序插入,但是您将所有数据都放在叶节点中(这些节点相当大),因此您至少可以获得合理数量的连续访问。
要维护排序的整数流列表,我将使用std::priority_queue与任何底层容器(vector或deque取决于特定用途)。
您可以将push() ing保留到priority_queue中,并使用top()和pop()按排序顺序检索
答案应为std::set
。std::map<key, value>
必须考虑当有<key, value>
对数据时,需要根据key
同样,如果您必须考虑重复,请根据数据类型使用std::multiset
和std::multimap
。
- C++ 如何比较n个排序的整数向量以找到互元素?
- 有没有更好的方法对C++中的三个整数进行排序?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 如何在一个巨大的文本文件中对整数进行排序
- 根据偶数值对整数向量进行排序
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 对包含整数的文本文件进行排序时,必须逐行进行排序
- 排序函数如何在整数对的向量上工作?
- 输出可序列化的排序整数
- 在 C++ 中使用 10 个随机整数的数组进行气泡排序不起作用
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- QuickSort无法始终如一地对100 000个整数的数据集进行排序
- 整数阵列合并排序比QuickSort快
- 计算以毫秒为单位的分类算法对整数阵列排序的时间
- 如何输入整数并将其从最高到最低排序
- 整数排序列表..TMP
- 为什么我的MinHeap对整数排序正确,但我自己的类却不正确
- 在c++中使用整数排序(自定义使用std:: Sort)
- 如何使用现有的整数排序来排序整数元组
- 最快的整数排序实现200-300位整数