xcode 如果擦除功能不起作用,我如何删除矢量中的元素?

wecizke3  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(146)

我试图写一个函数来表示一个二维向量,向量的每个元素都有两个信息。我想写一个方法来搜索向量,如果它发现第一个信息相同,它就删除元素。下面是我的代码:

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--;
        }
    }
}

不幸的是,我的编译器不接受'erase'函数并显示,有“没有匹配的成员函数调用'erase'”。我不知道如何解决这个问题,或者是否有更好的方法来删除二维向量的某个元素。谢谢:)

wsxa1bj1

wsxa1bj11#

我觉得你需要的其实很简单。
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());
}

相关问题