にペアで値を変更することができます。は、どのように私は私が行うことができますマップ
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でハングアップしてしまいました何かヒント?
あなたはその価値に頼っていますか?文字列リテラルは、別の用途で同じアドレスを持つ必要はありません(特に異なる翻訳単位で使用する場合)。だから、実際には、このことにより、2つの値を作成することがあります。何が起こるかは、それはアドレスでソートすることがあるため
counter["apple"] = 1;
counter["apple"] = 1;
はまた、あなたは、任意の並べ替えのない種類を取得しません。それは、そのoperator<
辞書式を比較したコンテンツを認識だとして、その問題を持っていないstd::string
を使用します。
map<std::string, int> counter;
counter["apple"] = 1;
assert(++counter["apple"] == 2);
形式のマップ:それはすることができないため
map <char *, int> counter;
は、非常に賢明な構造ではありません効果的に含まれるcharポインタを管理します。地図を
map <string, int> counter;
に変更し、問題が解決するかどうかを確認してください。
問題が見つかりました。 '(、作る原因 - [キー]の値がintと値== 1であれば、私は何とかマップを行うことができませんでし、
キー/値のペアでmap<string,int> counter;
counter["apple"]++;
if(counter["apple"]==1)
counter.erase("apple");
else
counter["apple"]--; //this will work
:私はそれを変更した場合 値== 0?)
「デバッガがハングする」とはどういう意味ですか?そして問題を示す実際のコンパイル可能なコードを投稿してください。 –