2015-03-18 5 views
0
//test 


#include <map> 
#include <iostream> 


using namespace std; 

int main() 
{ 
    map<int, string> Inventory; 

    Inventory[1] = "Sword"; 
    Inventory[2] = "Armor"; 
    Inventory[3] = "Shield"; 

    map<int, string>::iterator iter; 

    for (iter = Inventory.begin(); iter != Inventory.end(); ++iter) 
     cout << (*iter).first << " - " << (*iter).second << "\n"; 

    iter == Inventory.find(2); 

    Inventory.erase(iter); 

    cout << "\n" << Inventory.count(2) << "\n"; 

    iter == Inventory.find(2); 
    cout << "\n" << (*iter).first << " - " << (*iter).second.size() << "\n\n"; 


    if (Inventory.find(2) == Inventory.end()) 
     cout << "\nNot found.\n"; 

    for (iter = Inventory.begin(); iter != Inventory.end(); ++iter) 
     cout << (*iter).first << " - " << (*iter).second << "\n"; 

    cout << "\n" << Inventory.size() << "\n"; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 

} 

Это то, что я получаю, когда я запустить программу:Действительно путаются карты :: Стирание()

1 - Меч

2 - Броня

3 - Щит

2 - 1968772512

1 - Меч

3 - Щит

Так что я немного запутался, почему ключ '2' не быть полностью удалены.

Inventory.count (2) возвращает 1, что означает, что ключ «2» все еще задерживается в инвентаре где-то?

Очевидно, что после стирания ключа «2» find() все еще возвращает итератор к этому значению ключа?

Как именно стираются() работают?

ответ

4
iter == Inventory.find(2); 

не уступка, я предполагаю, что вы имели в виду сделать:

iter = Inventory.find(2); 
Смежные вопросы