【发布时间】:2013-05-26 05:53:10
【问题描述】:
我有一个set < long long > A。插入 500 个元素后:
ll k;
for ( int i=0 ; i<500 ; i++ ) {
cin >> k ;
A.insert (k) ;
}
现在当我想改变元素的值时:
A[0]--;
编译器给了我这个错误:
'A[0]'中的'operator[]'不匹配
如果你能帮我解决这个问题,我将不胜感激。
【问题讨论】:
我有一个set < long long > A。插入 500 个元素后:
ll k;
for ( int i=0 ; i<500 ; i++ ) {
cin >> k ;
A.insert (k) ;
}
现在当我想改变元素的值时:
A[0]--;
编译器给了我这个错误:
'A[0]'中的'operator[]'不匹配
如果你能帮我解决这个问题,我将不胜感激。
【问题讨论】:
集合是元素的集合,其中你“有”或“不”有一个元素(所以如果你 insert 数字 6 五次,它仍然只计算一次) .所以要删除你erase它的元素。在集合上使用 [] 没有多大意义(或者在返回的内容上使用 --)。
也许您正在寻找使用另一种容器类型 - 可能是 map<long long, int> B,您使用 B[k]++;。然后你可以稍后再做B[0]--;——虽然如果0没有被使用,你最终会在那个元素中得到-1,所以你可能想改用(*B.begin())--;——真的取决于你在尝试什么实现。
【讨论】: