2009-05-20 26 views
0

にペアで値を変更することができます。は、どのように私は私が行うことができますマップ

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

をしかし、私はやるとき:

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

は、私は、デバッガは

をVS 2008でハングアップしてしまいました何かヒント?

+2

「デバッガがハングする」とはどういう意味ですか?そして問題を示す実際のコンパイル可能なコードを投稿してください。 –

答えて

5

あなたはその価値に頼っていますか?文字列リテラルは、別の用途で同じアドレスを持つ必要はありません(特に異なる翻訳単位で使用する場合)。だから、実際には、このことにより、2つの値を作成することがあります。何が起こるかは、それはアドレスでソートすることがあるため

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

はまた、あなたは、任意の並べ替えのない種類を取得しません。それは、そのoperator<辞書式を比較したコンテンツを認識だとして、その問題を持っていないstd::stringを使用します。

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

形式のマップ:それはすることができないため

map <char *, int> counter; 

は、非常に賢明な構造ではありません効果的に含まれるcharポインタを管理します。地図を

map <string, int> counter; 

に変更し、問題が解決するかどうかを確認してください。

0

問題が見つかりました。 '(、作る原因 - [キー]の値がintと値== 1であれば、私は何とかマップを行うことができませんでし、

キー/値のペアで
map<string,int> counter; 
counter["apple"]++; 

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

:私はそれを変更した場合 値== 0?)