я могу сделать:Как я могу изменить значение в паре на картах
map<char*, int> counter;
++counter["apple"];
Но когда я делаю:
--counter["apple"] // when counter["apple"] ==2;
Я получил отладчик повесила в VS 2008.
Любые намеки?
я могу сделать:Как я могу изменить значение в паре на картах
map<char*, int> counter;
++counter["apple"];
Но когда я делаю:
--counter["apple"] // when counter["apple"] ==2;
Я получил отладчик повесила в VS 2008.
Любые намеки?
Вы полагаетесь на его ценность? Строковый литерал не обязательно должен иметь один и тот же адрес в разных целях (особенно при использовании в разных единицах перевода). Таким образом, вы можете фактически создать два значения этим:
counter["apple"] = 1;
counter["apple"] = 1;
Также вы не получите вид любой сортировки, так как то, что происходит в том, что он сортирует по адресу. Используйте std::string
, которые не имеют этой проблемы, как это известно о содержании и чьи operator<
сравнивает лексикографическое:
map<std::string, int> counter;
counter["apple"] = 1;
assert(++counter["apple"] == 2);
Карта вида:
map <char *, int> counter;
не очень разумная структура, потому что она не может управлять указателями символов, которые он содержит. Измените карту на:
map <string, int> counter;
и посмотреть, не устраняет ли эта проблема.
Я нашел проблему. Если изменить его на:
map<string,int> counter;
counter["apple"]++;
if(counter["apple"]==1)
counter.erase("apple");
else
counter["apple"]--; //this will work
В паре ключ/значение, если значение является ИНТ и значение == 1, я как-то не мог сделать карту [ключ] -, (потому что это сделает значение == 0?)
Что вы подразумеваете под словом «debugger hung»? И, пожалуйста, напишите какой-нибудь фактический компилируемый код, который иллюстрирует проблему. – 2009-05-20 08:05:54