Делаем очередность хода

Так как лабиринты планируются игрой пошаговой, необходимо внедрить алгоритм перехода хода.

Пока решил внедрять фиксированное время на ход, потом может поменяю, а может и нет.

Для начала, внес некии правки в структуру TMazeMap
typedef struct
{
int Id;
unsigned char w,h;
char *data;

TCreatureList creatures;
time_t lastTime;
int currentId;
int timelenght;

} TMazeMap;

А также написал несколько дополнительных функций, а именно:
void initMaze(TMazeMap *m);
void nextTurn(TMazeMap *m);
void checkMazes();
void removeFromActive(int id);

И так подробнее.

Первая функция - initMaze() просто иницилизирует наш лабиринт - структуру TMazeMap, но не устанавливает очередность хода, т.к. массив creatures при создании лабиринта еще пуст.

Собственно одна из основных функция это переход хода - nextTurn(TMazeMap*):
void nextTurn(TMazeMap *m)
{

bool findid=false,findnext=false,findfirst=false;
int firstid;

for(TCreatureList::iterator i=m->creatures.begin();i<m->creatures.end();i++)
{

if (i->Live && !findfirst) {findfirst=true;firstid=i->Id;}

if (!findid && i->Id == m->currentId) findid=true;
else
if (findid && !findnext)
if (i->Live)
{
findnext=true;
m->currentId=i->Id;
m->lastTime = time(0);
}
}

if (!findnext)
if (findfirst)
{
m->currentId=firstid;
m->lastTime = time(0);
}
else
{
removeFromActive(m->Id);
}

}

Собственно в пояснениях не нуждается ход переходит следующему монстру или игроку который еще жив, если дошли до конца вектора creatures берем первого, если таких нет то удаляем из set'ов данный, пустой, лабиринт.

Также каждую секунду нам необходимо "проверять" активные лабиринты на предмет таймаута по ходу или просто, сделать ход компьютерной зверушкой, данную функцию будет выполнять checkMazes() в отдельной нити (thread).
void checkMazes()
{
if (!activeMaze.size()) return;

time_t now=time(0);

int *nn = new int[activeMaze.size()];
int j=0;
for(set::iterator i=activeMaze.begin();i!=activeMaze.end();i++)
nn[j++]=*i;

for(int i=0;imazeList[nn[i]].lastTime + mazeList[nn[i]].timelenght)
nextTurn(&mazeList[nn[i]]);

}

delete [] nn;
}

Вот, убейте меня, код мне, лично, НЕ НРАВИТСЯ. Незнаю почему. Хочу либо отказаться от set и сделать вектором или еще чего.

Да, кстати, при иницилизации для обычного лабиринта timelenght = STD_TIMELENGHT_FOR_TURN = 60 (сек)