分布在多个帧中的 C++ 中的排序

Posted

技术标签:

【中文标题】分布在多个帧中的 C++ 中的排序【英文标题】:Sorting in C++ distributed across several frames 【发布时间】:2016-06-10 14:33:41 【问题描述】:

在我正在开发的游戏中,我有大量数据存储在我想要排序的向量中,但不会影响该操作期间的游戏性能。 那么是否有(在 STL 或其他)异步算法允许对任何数据向量进行排序,每帧的比较次数有限(每次都需要一些计算),并在 X 帧计算后提供结果?

【问题讨论】:

你可能会在this article找到一些关于增量排序的答案。 在你做任何英雄事之前记得评估你的排序的实际性能影响!它可能比你想象的要快。 (你可能已经检查过了,但你没有明确地说出来)。 是的,它可以是各种各样的,我事先不知道我要排序多少数据,它可能会对应用程序的性能产生严重影响 - 实际上,下降游戏中的帧率。 我对这个排序算法的方法是“我不在乎你花了多少时间(=我执行这个方法的次数)来排序这个列表,我只是不想让你做每次执行超过 10 次比较”(因为比较需要一些计算,并且对多个对象进行排序) 【参考方案1】:

您可以为此使用std::partial_sort,在每次迭代时对小块向量进行排序。完成所有块后,您可以使用inplace_merge 将已排序的块逐对合并在一起,并得到最终排序的向量。

【讨论】:

【参考方案2】:

帧是什么意思?您可以使用std::inplace_merge 拆分您的数据并进行合并排序。

【讨论】:

我不会在方法的一次执行中同步排序,而是多次调用相同的方法来进行排序,并将其执行分散到时间上。这是在一个游戏中,有几个角色,所以如果我有很多数据要一次排序,我不希望像现在这样帧率下降。

以上是关于分布在多个帧中的 C++ 中的排序的主要内容,如果未能解决你的问题,请参考以下文章

在R中的数据帧中动态地重新排序列

从 C++ 中的排序数组中删除重复项

合并排序算法中的 C++“以 std::out_of_range:vector 类型的未捕获异常终止”错误

C++ 中的 QuickSort 无法完成排序

如何对分布式数据进行排序和分页?

在 C++ 中排序后如何调用数组中的变量?