C++ 使用ID和数组(向量)的性能

C++ 使用ID和数组(向量)的性能,c++,c,performance,C++,C,Performance,我在学校学过如何使用带有整数ID的数据库,我想知道在C/C++中这样做是否也是一种好方法。我正在使用Ogre3D制作一个游戏,所以我希望我的游戏代码使用尽可能少的周期 这不是确切的代码(我使用的是向量,它是关于角色和能力等),但我很想知道我访问权重的行是否会导致瓶颈,因为我会做几个数组下标 struct item { float weight; int mask; item(): mask(0) {} } items[2000]; struct shipment {

我在学校学过如何使用带有整数ID的数据库,我想知道在C/C++中这样做是否也是一种好方法。我正在使用Ogre3D制作一个游戏,所以我希望我的游戏代码使用尽可能少的周期

这不是确切的代码(我使用的是向量,它是关于角色和能力等),但我很想知道我访问权重的行是否会导致瓶颈,因为我会做几个数组下标

struct item
{
    float weight;
    int mask;
    item(): mask(0) {}
}
items[2000];

struct shipment
{
    int item_ids[20];

}
shipments[10000];

struct order
{
    int shipment_ids[20];
}
orders[3000];

int main()
{
    // if I want to access an item's data of a certain order, I do:
    for (int i = 0; i < 3000; ++ i)
    {
        if (items[shipments[orders[4].shipment_ids[5]]].weight > 23.0)
            s |= (1<< 31);
    }
}
struct项
{
浮重;
int掩模;
项():掩码(0){}
}
项目[2000];
结构装运
{
int item_id[20];
}
装运[10000];
结构顺序
{
int装运标识[20];
}
订单[3000];
int main()
{
//如果我想访问某个订单的项目数据,我会:
对于(int i=0;i<3000;++i)
{
if(项目[装运[订单[4]。装运标识[5]]]。重量>23.0)

s |=(1一个好的优化器应该能够计算这些项中每个项的内存地址的精确偏移量。循环迭代之间没有依赖关系,因此应该能够展开循环(SIMD处理)。看起来很好,IMHO。如果您可以避免浮动,这也会对您有所帮助。

如果您在任何地方都没有使用i,为什么要将其放入循环中?根据您发布的代码,您应该删除循环,因为您只是指一个静态位置。。