Maybe you could use a look up table for the zones and then each cell of the table having the list of all mobs in the area ,and then only update the state of the monsters ,that are in the current zone you're in . I am assuming here that maybe you're iterating threw the big vector and then updating all the states ,only that would have a non-memory performance toll.Of course i might be missing something.
Edit.Ok i looked up your code and it seems you're doing that as it is so this seems irrelevant,although a small optimization would be just call this once myPlayer->getZone() and assign it to some variable instead of calling it all the time ,though just quite minor.