できます:
map<char*, int> counter;
++counter["apple"];
しかし、私がするとき:
--counter["apple"] // when counter["apple"] ==2;
VS 2008 でデバッガーがハングアップしました。
ヒントはありますか?
その価値に頼っていますか?文字列リテラルは、異なる用途で同じアドレスを持つ必要はありません (特に、異なる翻訳単位で使用される場合)。したがって、実際には次のように 2 つの値を作成できます。
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;
含まれている char ポインターを効果的に管理できないため、あまり賢明な構造ではありません。マップを次のように変更します。
map <string, int> counter;
問題が解決するかどうかを確認します。
問題が見つかりました。それを次のように変更すると:
map<string,int> counter;
counter["apple"]++;
if(counter["apple"]==1)
counter.erase("apple");
else
counter["apple"]--; //this will work
キー/値のペアで、値が int で値 ==1 の場合、どうにかして map[key] を実行できませんでした--, ('だって、値が ==0 になるから?)