0
Векторы, итераторы и std::find
Есть ли способ использовать разные типы итераторов в разных векторах? Или есть функция, которая возвращает позицию элемента в векторе как целое число?
std::vector<DWORD>::iterator it; // Iterator
// monsterQueue is a <DWORD> vector
it = std::find(bot.monsterQueue.begin(), bot.monsterQueue.end(), object);
// Check do we have the object in the queue
if(it != bot.monsterQueue.end()) // If we do have it
{
bot.monsterDists.at(it) = mobDist; // monsterDists is <int> vector
bot.monsterCoordX.at(it) = PosX; // monsterCoordX is <int> vector
bot.monsterCoordY.at(it) = PosY; // monsterCoordY is <int> vector too
}
Это пример кода, есть ли у кого-нибудь указатели?
Ответов (5)5
Решение
0
Пытаться
std::vector<DWORD>::iterator it; // Iterator
// monsterQueue is a <DWORD> vector
it = std::find(bot.monsterQueue.begin(), bot.monsterQueue.end(), object);
// Check do we have the object in the queue
if(it != bot.monsterQueue.end()) // If we do have it
{
size_t idx = это - bot.monsterQueue.begin ()
bot.monsterDists.at(idx) = mobDist; // monsterDists is <int> vector
bot.monsterCoordX.at(idx) = PosX; // monsterCoordX is <int> vector
bot.monsterCoordY.at(idx) = PosY; // monsterCoordY is <int> vector too
}
Также, вероятно, будет лучше создать структуру с 4 членами «monster», monsterDist ,ordinX и координатойY и хранить объекты структуры в векторе.
0
Вы можете использовать произвольный доступ в std::vectors:
DWORD find_this = 0x0;
int pos = 0;
for (; i<monsterQueue.size(); ++i)
{
if (monsterQueue[i]==find_this)
break;
}
После цикла pos будет там, где петля разорвалась, то есть где find_this
она находится. Кроме, конечно, если find_this
нет даже в векторе.