我有一个这样的 vector :
struct RIFT_MONSTER_SPAWN
{
DWORD dwWorldId;
D3DXVECTOR3 vPos;
};
vector<RIFT_MONSTER_SPAWN> vecMSpawn;
如您所见,它将包含 2 个值 dwWorldId
和 D3DXVECTOR3 vPos;
vPos
将保存 x,y,z
值。
现在我想要做的是循环 true vector ,如果 worldId
与正在传递的 worldId
匹配。它应该返回与 worldId
相关的 vPos
。
如果有使用std::find find_all
和count
。
但它总是返回错误
binary == no operator found which takes a left hand operator of 类型
所以我有点卡在这上面了。任何帮助将不胜感激。
谨致问候。
这是给我带来问题的代码
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_vecMSawnPoint 在.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)
关于C++在 vector 中找到一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41406473/