【发布时间】:2014-03-12 19:23:45
【问题描述】:
我正在使用一个用 c++ 编写的粒子物理库来开发游戏。
为了绘制粒子,我必须得到一个包含所有位置的数组,像这样..
b2Vec2* particlePositionBuffer = world->GetParticlePositionBuffer();
这将返回一个 b2Vec2 对象数组(在物理引擎中表示二维向量)。
我也可以使用
b2ParticleColor* particleColourBuffer = world->GetParticleColorBuffer();
我想得到 Y 值最高的 10% 的粒子(然后改变它们的颜色)
我的想法是..
1. 制作一个与particlePositionBuffer数组大小相同的struct数组,struct只包含一个int(particlePositionBuffer数组中的粒子索引)和一个float(粒子y位置)
2.然后我按y位置对数组进行排序。
3.然后我使用结构数组中前 10% 的结构中的 int 来处理它们在particleColourBuffer 数组中的颜色。
有人可以告诉我如何在 c++ 中对结构进行排序和数组吗?
您还认为这是解决此问题的一种不错的方式吗?我只需要做一次(不是每一帧)
【问题讨论】:
-
std::sort有什么问题?在您的结构中编写比较器函数或重载operator<。也只是一个小问题,我认为2d vector objects指的是2dvector而不是std::vector。你能编辑你的问题吗,因为我一开始很困惑。 -
是的,我看到这个问题的答案非常好。 stackoverflow.com/questions/873715/c-sort-with-structs 唯一的是他说这是针对 STL 容器而不是数组(我不知道 STL 容器是什么)
-
@remyabel:顺便说一句,
std::nth_element(或std::partial_sort)就足够了。 -
一个 STL 容器,是标准模板库中的一个容器。当您说“制作一个数组...”时,您会“制作(并填充)一个向量...”。事实上,由于您想要一个直到运行时才知道大小的“数组”,所以您真的想改用
std::vector<>。 -
@GuyeIncognito:您可以使用
std::vector<std::pair<float, int>>和std::greater<std::pair<float, int>>作为比较函子。