繁体   English   中英

如果擦除 function 不起作用,如何删除向量中的元素?

[英]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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM