我需要一个数据结构,它可以容纳一组数字并尽快对它们进行排序。
我认为列表会很好,因为在列表中插入一个新数字比矢量更容易(这需要在插入后复制元素)。但是,遍历链表(我使用排序列表作为查找以从unordered_map中获取对象)可能会慢得多,因为内存分散在整个堆中。
我正在考虑使用地图,但由于不连续的性质,这也不会导致内存访问不良吗?
静态分配的数组(有很多空格)和快速排序算法是我想到的另一个想法......
回顾一下 - 我需要一个数据结构,它允许我插入新元素并尽快重新排序元素。元素将是数字。
感谢任何帮助?
答案 0 :(得分:2)
最快的数据结构是阵列连续的内存区域,最适合缓存。
排序取决于。快速排序与插入排序的组合用于对低于特定大小的子阵列进行排序可能是您最好的选择,而不需要采用更深奥的东西。
答案 1 :(得分:0)
您可能想要考虑如何在vector
/ map
中存储这些对象。带有必要的比较函子的智能指针可能就是你想要的。
答案 2 :(得分:0)
如果通过“数字组”表示每个数字只出现一次,并且您希望它排序,请使用std :: set。老实说,除非你处理大量数据,否则std :: list甚至std :: vector都可能足够好。
答案 3 :(得分:0)
Boost.Containers库包含flat_set
数据结构。它在std::set
数据存储上实现std::vector
接口。根据文档的优点
答案 4 :(得分:-1)
什么是最快的数据结构
数组。
(和排序算法)
Quicksort,只要您能够容忍最坏情况的行为。否则可能是heapsort。