用C++对结构数组进行排序
Sorting an array of structs in C++
我正在为游戏使用用c++编写的粒子物理库。
为了绘制粒子,我必须得到它们所有位置的数组,比如…
b2Vec2* particlePositionBuffer = world->GetParticlePositionBuffer();
这将返回b2Vec2对象的数组(表示物理引擎中的二维向量)
我还可以使用获取并设置它们的颜色
b2ParticleColor* particleColourBuffer = world->GetParticleColorBuffer();
我想得到10%具有最高Y值的粒子(然后改变它们的颜色)
我的想法是…
1。制作一个与particlePositionBuffer数组大小相同的结构数组,该结构只包含一个int(particlePositionBuffer数组中的粒子索引)和一个float(粒子y位置)
2。然后我按y位置对数组进行排序
3.然后,我使用结构中结构数组中前10%结构中的int来填充particleColourBuffer数组中它们的颜色。
有人能告诉我如何在c++中对这样的结构进行排序和数组吗
你还认为这是一个不错的方式吗?我只需要做一次(不是每帧)
以下可能会有所帮助:
// Functor to compare indices according to Y value.
struct comp
{
explicit comp(b2Vec2* particlePositionBuffer) :
particlePositionBuffer(particlePositionBuffer)
{}
operator (int lhs, int rhs) const
{
// How do you get Y coord ?
// note that I do rhs < lhs to have higher value first.
return particlePositionBuffer[rhs].getY() < particlePositionBuffer[lhs].getY();
}
b2Vec2* particlePositionBuffer;
};
void foo()
{
const std::size_t size = world->GetParticleCount(); // How do you get Count ?
const std::size_t subsize = size / 10; // check for not zero ?
std::vector<std::size_t> indices(size);
for (std::size_t i = 0; i != size; ++i) {
indices[i] = i;
}
std::nth_element(indices.begin(), indices.begin() + subsize, indices.end(),
comp(world->GetParticlePositionBuffer()));
b2ParticleColor* particleColourBuffer = world->GetParticleColorBuffer();
for (std::size_t i = 0; i != subsize; ++i) {
changeColor(particleColourBuffer[i])
}
}
如果粒子数较低,无论哪种方式都无关紧要,使用简单的stl排序例程首先对它们进行排序就可以了。
如果这个数字很大,我会创建一个二进制搜索树,其最大大小是粒子数量的10%。然后我会维护实际存储在树中的minY,以便快速拒绝。然后这个算法应该做到:
- 遍历原始数组并将项目添加到树中,直到它已满(10%)
- 更新你的minY
- 对于原始数组中的剩余项
- 如果item.y小于minY,则转到下一个项目(快速拒绝)
- 否则
- 从树中删除当前最小的Y值
- 将较大的Y项目添加到树中
- 更新MinY
二进制搜索树具有快速插入、快速搜索和保持排序的优点。如果您想成为FAST,这比对整个阵列进行完整排序要好。
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序