我有一个像这样的向量:
struct RIFT_MONSTER_SPAWN
{
DWORD dwWorldId;
D3DXVECTOR3 vPos;
};
vector<RIFT_MONSTER_SPAWN> vecMSpawn;
如您所见,它将包含2个值
dwWorldId
和D3DXVECTOR3 vPos;
vPos
将保留x,y,z
值。现在,我想做的是使向量真正循环,如果
worldId
与正在传递的worldId
匹配。它应该返回与vPos
有关的worldId
。如果使用
std::find find_all
和count
。但是它总是返回错误
二进制==未找到需要左手运算符的运算符
所以我对此有些困惑。任何帮助,将不胜感激。
亲切的问候。
这是给我问题的代码
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)