我有一段代码,在这里我创建了一个从vector到int的映射。
我用auto迭代地图,但即使我可以访问向量的大小,我也不能按到键。
那是不允许的吗?
int numberOfArithmeticSlices(vector<int>& A) {
map<vector<int>, int> m;
for(int i=0; i<A.size(); i++){
m[{A[i]}] = 0;
for(auto it: m){
if(it.first.size() == 1){
it.first.push_back(A[i]);
it.second = A[i]-it.first[0];
}
else{
if(A[i]-it.first.back() == it.second){
it.first.push_back(A[i]);
}
}
}
}
int ans=0;
for(auto it:m){
if(it.first.size()>2)
ans++;
}
return ans;
}
我得到的错误是:调用PUSH_BACK
没有匹配的成员函数
在std::map
中将键添加到映射后,您不能更改该键的值。 唯一的出路是擦除
密钥,并在进行更改后重新插入它。
查看下面的内容,了解如何从std::map
中擦除密钥。
顺便说一下,为什么不使用指向std::vector
的指针作为键,而不使用std::vector
本身呢? 这比重新构造向量来添加它更有效。
如果您使用指向向量的指针作为键,那么您将不需要为了对向量进行更改而更改键。 确保动态声明向量。