我與我的multimap相關的「map/set iterator not incrementable」錯誤有問題。我試着用Google搜索答案,但答案並沒有幫助我。我假設的問題是,因爲我的代碼第一部分執行「akcja」命令,它可以(但不必)刪除multimap中的組件之一:}C++ map/set迭代器在使用multimap時不會增加錯誤
while ((c = getch()) != 27)
{
if (c == 'n')
{
typedef multimap<int, Organizm*>::iterator iterator;
for (int i = 10; i>= 0; i--)
{
std::pair<iterator, iterator> iterpair = kolejnoscRuchu.equal_range(i);
iterator it = iterpair.first;
for (; it != iterpair.second; ++it)
{
if(it->second->inicjatywa !=0)
{
it->second->akcja();
}
}
}
如果某些條件得到滿足的akcja()將觸發其除去該元素的命令:
void Swiat::usunOrganizm(Organizm *organizm)
{
this->organizmy[organizm->pozycja.x][organizm->pozycja.y] = NULL;
typedef multimap<int, Organizm*>::iterator iterator;
std::pair<iterator, iterator> iterpair2 = this->kolejnoscRuchu.equal_range(organizm->inicjatywa);
iterator it2 = iterpair2.first;
for (; it2 != iterpair2.second; ++it2)
{
if (it2->second == organizm)
{
cout << "usuwam " << it2->second->rysowanie() << endl;
kolejnoscRuchu.erase(it2);
delete organizm;
break;
}
}
}
我添加了一個「COUT < < 「usuwam」 < < it2->二階> rysowanie()「endl;」部分來確認從我的multimap中刪除任何元素後是否發生錯誤。我將不勝感激任何幫助
謝謝,但我不知道這是否解決方案將一直幫助我。基本上在我的例子中,我有2個迭代器,因爲我的multimap是一個有機體的容器,其各自的主動性值在0-10範圍內。當生物體移動時,它可以與另一個生物體作戰,如果發生戰鬥,其中一個將會死亡 - 因此是第二個迭代器。你的解決方案讓我迭代第二個循環,但是如果我在「usunOrganizm」函數中刪除第一個迭代器會怎麼樣? –
@LKaniewski:好的,增加了另一種可能的解決方案。 – rici