0

我可以:

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

但是当我这样做时:

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

我在 VS 2008 中挂断了调试器。

有什么提示吗?

4

3 回答 3

5

你依赖它的价值吗?字符串文字在不同用途中不需要具有相同的地址(尤其是在不同的翻译单元中使用时)。因此,您实际上可以通过以下方式创建两个值:

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

你也没有得到任何排序,因为发生的是它按地址排序。使用std::stringwhich 没有该问题,因为它知道内容并且operator<比较字典顺序:

map<std::string, int> counter;
counter["apple"] = 1;
assert(++counter["apple"] == 2);
于 2009-05-20T08:08:18.443 回答
2

表格的地图:

map <char *, int> counter;

不是一个非常明智的结构,因为它不能有效地管理它包含的 char 指针。将地图更改为:

map <string, int> counter;

看看这是否能解决问题。

于 2009-05-20T08:09:57.037 回答
0

我发现了问题。如果我将其更改为:

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

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

在键/值对中,如果 value 是 int 且 value ==1,我不知何故无法执行 map[key]--,(因为这会使 value ==0?)

于 2009-05-20T19:54:22.153 回答