2009-05-20 4 views
0

я могу сделать:Как я могу изменить значение в паре на картах

map<char*, int> counter; 
++counter["apple"]; 

Но когда я делаю:

--counter["apple"] // when counter["apple"] ==2; 

Я получил отладчик повесила в VS 2008.

Любые намеки?

+2

Что вы подразумеваете под словом «debugger hung»? И, пожалуйста, напишите какой-нибудь фактический компилируемый код, который иллюстрирует проблему. – 2009-05-20 08:05:54

ответ

5

Вы полагаетесь на его ценность? Строковый литерал не обязательно должен иметь один и тот же адрес в разных целях (особенно при использовании в разных единицах перевода). Таким образом, вы можете фактически создать два значения этим:

counter["apple"] = 1; 
counter["apple"] = 1; 

Также вы не получите вид любой сортировки, так как то, что происходит в том, что он сортирует по адресу. Используйте std::string, которые не имеют этой проблемы, как это известно о содержании и чьи operator< сравнивает лексикографическое:

map<std::string, int> counter; 
counter["apple"] = 1; 
assert(++counter["apple"] == 2); 
2

Карта вида:

map <char *, int> counter; 

не очень разумная структура, потому что она не может управлять указателями символов, которые он содержит. Измените карту на:

map <string, int> counter; 

и посмотреть, не устраняет ли эта проблема.

0

Я нашел проблему. Если изменить его на:

map<string,int> counter; 
counter["apple"]++; 

if(counter["apple"]==1) 
    counter.erase("apple"); 
else 
    counter["apple"]--; //this will work 

В паре ключ/значение, если значение является ИНТ и значение == 1, я как-то не мог сделать карту [ключ] -, (потому что это сделает значение == 0?)

 Смежные вопросы

  • Нет связанных вопросов^_^