我有一个 vector 的 vector 。如果它小于特定值或大于另一个值,我想读取它的第一个组件并将其从 vector 中删除。我怎样才能做到这一点? 我的代码是:
int d = sum_et.size();
vector <float>sum_et
vector <float>sum_ieta_iphi;
vector <vector<float> >v;
sum_et.push_back(energySum);
sum_ieta_iphi[0]=energySum;
sum_ieta_iphi[1]=ieta;
sum_ieta_iphi[2]=iphi;
v.push_back(sum_ieta_iphi);
float max,min;
max=sum_et[(int)(19/20*d)];
min=sum_et[(int)(d/20)];
for (int i=0;i<v.size();i++){
/* line 312 */ if (v[i[0][0][0]]<min || v[i[0][0][0]]>max){
/* line 313 */ v.erase(v[i]);
}
}
我收到这些错误:
Analysis.cc:312:16: error: invalid types 'int[int]' for array subscript
Analysis.cc:312:37: error: invalid types 'int[int]' for array subscript
Analysis.cc:313:14: error: no matching function for call to 'std::vector<std::vector<float> >::erase(std::vector<float>&)'
最佳答案
问题是您索引的不是 vector 的东西(整型变量 i
)。
还有更好的方法可以做到这一点。请记住,C++ 有很多不错的 algorithms在标准库中,例如 std::copy_if
如果谓词为真,它会从一个集合复制到另一个集合。
这可用于将 vector 复制到自身上:
std::copy_if(std::begin(v), std::end(v), std::begin(v),
[v, min, max](const vector<float>& value)
{ return v[value[0]] >= min && v[value[0]] <= max; });
关于c++ - 来自两个不同文件的关联值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17545795/