void Manager::Simulate(Military* military, Shalishut* shalishut,char* args[]){
Simulation* simulation = Simulation::GetInstance();
Time* time = Time::GetInstance();
multimap<int,Task*>::const_iterator itTasks;
itTasks = simulation->GetTasks().begin();
while(itTasks != simulation->GetTasks().end()){
while (itTasks->second->GetTimeStamp() == time->GetTime()){
//TaskExecute(itTasks->second,military,shalishut,args);
itTasks++;
}
// Unit take car of vehicles
time->TimeIncrease();
}
}
在Debug中注意到项目在第一次出现时会下降。
感谢您的帮助。
答案 0 :(得分:2)
GetTasks()
在调用时会创建一个新的map / set,并返回吗?或者它是否返回适当引用的集合的副本?
如果是这种情况,则每次调用GetTasks()
都会返回一个独立于以前返回的对象的新对象。将其中一个对象的迭代器与另一个此类对象的迭代器(如begin()
和end()
迭代器)进行比较是没有意义的。
确保所有迭代器都来自同一个对象,而不是来自相同数据的不同副本。
您可能希望GetTasks()
函数返回引用或const引用,具体取决于Simulation
对象的常量:
class Simulation {
...
multimap<int,Task*>& GetTasks() { return m_tasks; }
const multimap<int,Task*>& GetTasks() const { return m_tasks; }
}