如何从向量中删除struct元素?

Dav*_*llo 1 c++ struct vector

我是一名新手程序员,我正在开发一个程序,在酒店里有一个宠物注册表(我们在课堂上看到的一些愚蠢的运动,无关紧要).我正在使用向量来保存结构元素(宠物).结构的代码是这样的:

struct Pets{
string Name;
string Race;
string Owner;
int Tel;
}p;
Run Code Online (Sandbox Code Playgroud)

并且要求用户输入的功能是:

AddPet(vector<Pets> &vtnew)
{
Pets newpet;
cout << "Enter the pet's name: " << endl;
cin >> newpet.Name;
cout << "Enter the pet's race: " << endl;
cin >> newpet.Race;
cout << "Enter the owner's name: " << endl;
cin >> newpet.Owner;
cout << "Enter the owner's telephone number: " << endl;
cin >> newpet.Tel;
vtnew.push_back(newpet);
}
Run Code Online (Sandbox Code Playgroud)

好的,现在我需要通过输入名称或其他内容来创建一个删除宠物的功能.有没有办法做到这一点?

Bil*_*nch 8

向量是未分类的容器,因此简单的解决方案是您唯一的选择.

void RemovePet(std::vector<Pet> & pets, std::string name) {
    pets.erase(
        std::remove_if(pets.begin(), pets.end(), [&](Pet const & pet) {
            return pet.Name == name;
        }),
        pets.end());
}
Run Code Online (Sandbox Code Playgroud)

这被称为擦除删除习语.

请注意,这将删除与该名称匹配的所有宠物,而不仅仅是一个.