[英]How can I delete an element in vector if erase function isn't working?
我正在尝试编写一个表示二维向量的 function,向量的每个元素都有两个信息。 我想写一个方法来搜索向量,如果它找到第一个信息。 同样,它擦除元素。 这是我的代码:
class Droga {
public:
Droga (){};
Droga (int _dlugosc, int _miasto) {
dlugosc = _dlugosc;
miasto = _miasto;
}
int dlugosc;
int miasto;
};
class Drogi {
public:
Drogi(int n);
void dodajDroge(int a, int b, int d);
void usunDroge(int a, int b);
vector<vector<Droga> > drogi;
};
Drogi::Drogi(int n){
drogi.resize(n);
}
void Drogi::dodajDroge(int a, int b, int d) {
drogi[a].push_back(Droga(d,b));
}
void Drogi::usunDroge(int a, int b){
for (int i=0; i<drogi.size(); i++){
if (drogi[a][i].miasto==b) {
drogi[a].erase(drogi[a].begin()+i);
i--;
}
}
}
不幸的是,我的编译器不接受“擦除”function 并显示“没有匹配的成员 function 用于调用‘擦除’”。 我不知道如何解决这个问题,或者是否有更好的方法来删除二维向量的某个元素。 谢谢:)
我认为你需要的很简单。
C++20版本:
void Drogi::usunDroge(int a, int b){
std::erase_if(drogi[a], [b](const Droga& e) {return e.miasto==b;});
}
C++20 版本之前:
void Drogi::usunDroge(int a, int b){
drogi[a].erase(std::remove_if(drogi[a].begin(), drogi[a].end(), [b](const Droga& e) {return e.miasto==b;}), drogi[a].end());
}
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.