我有一个像这样的向量:

struct RIFT_MONSTER_SPAWN
{
    DWORD dwWorldId;
    D3DXVECTOR3 vPos;
};

vector<RIFT_MONSTER_SPAWN> vecMSpawn;


如您所见,它将包含2个值dwWorldIdD3DXVECTOR3 vPos;
vPos将保留x,y,z值。

现在,我想做的是使向量真正循环,如果worldId与正在传递的worldId匹配。它应该返回与vPos有关的worldId

如果使用std::find find_allcount
但是它总是返回错误
二进制==未找到需要左手运算符的运算符

所以我对此有些困惑。任何帮助,将不胜感激。

亲切的问候。

这是给我问题的代码

void CRiftMatch::GetMoverSpawnPoints(dwWorldId)
{
    std::vector<RIFT_MONSTER_SPAWN> vecSpawn = CRiftMng::GetInstance()->m_vecMSpawnPoint;
    std::vector<RIFT_MONSTER_SPAWN>::iterator it = std::find(vecSpawn.begin(), vecSpawn.end(), dwWorldId);
    OUTPUTDEBUGSTRING("\n GetMoverSpawn %d", *it);
}


m.vecMSpawnPoint在.h文件中定义为

vector<RIFT_MONSTER_SPAWN> m_vecMSpawnPoint;


还要填写我正在使用此代码

while (Lua.TableLoop(-2))
        {
            RIFT_MONSTER_SPAWN rSpawnPoint;
            rSpawnPoint.dwWorldId = static_cast<int>(CScript::GetDefineNum(Lua.GetFieldToString(-1, "dwWorldId")));
            rSpawnPoint.vPos.x = static_cast<float>(Lua.GetFieldToNumber(-1, "x"));
            rSpawnPoint.vPos.y = static_cast<float>(Lua.GetFieldToNumber(-1, "y"));
            rSpawnPoint.vPos.z = static_cast<float>(Lua.GetFieldToNumber(-1, "z"));

            m_vecMSpawnPoint.push_back(rSpawnPoint);
            Lua.Pop(1);
        }

最佳答案

您必须修改结构才能在查找过程中比较值:

struct RIFT_MONSTER_SPAWN
{
    DWORD dwWorldId;
    D3DXVECTOR3 vPos;

    bool operator () ( const RIFT_MONSTER_SPAWN & m ) const
    {
        return m.dwWorldId == dwWorldId;
    }
};

RIFT_MONSTER_SPAWN monsterToFind;
monsterToFind.dwWorldId = dwWorldId;

it = std::find_if( vecSpawn.begin(), vecSpawn.end(), monsterToFind);




也许只是一种类型,但是在您的代码中,

void CRiftMatch::GetMoverSpawnPoints(dwWorldId)


但这应该是

void CRiftMatch::GetMoverSpawnPoints(DWORD dwWorldId)

10-06 13:57